mirror of
https://github.com/abcv7/sfbx-cloud.git
synced 2026-08-16 19:49:49 +00:00
256 lines
5.9 KiB
ANTLR
256 lines
5.9 KiB
ANTLR
grammar RuleParser;
|
|
|
|
import RuleLexer;
|
|
|
|
ruleSet : ruleSetHeader
|
|
ruleSetBody
|
|
;
|
|
|
|
ruleSetHeader : resource*
|
|
| functionImport*
|
|
| resource* functionImport*
|
|
| functionImport* resource*
|
|
;
|
|
|
|
ruleSetBody : rules* ;
|
|
|
|
rules : ruleDef | loopRuleDef ;
|
|
|
|
functionImport : 'import' packageDef';'?;
|
|
|
|
packageDef : Identifier
|
|
| Identifier('.'Identifier)+
|
|
| packageDef'.*';
|
|
|
|
resource : importVariableLibrary
|
|
| importActionLibrary
|
|
| importConstantLibrary
|
|
| importParameterLibrary
|
|
;
|
|
|
|
importParameterLibrary : 'importParameterLibrary' STRING ';'?;
|
|
|
|
importVariableLibrary : 'importVariableLibrary' STRING ';'?;
|
|
|
|
importConstantLibrary : 'importConstantLibrary' STRING ';'?;
|
|
|
|
importActionLibrary : 'importActionLibrary' STRING ';'?;
|
|
|
|
functionDef : 'function' Identifier '(' functionParameters? ')' '{' expressionBody '}'';'?;
|
|
|
|
functionParameters : functionParameter (','functionParameter)* ;
|
|
|
|
functionParameter : Datatype Identifier ;
|
|
|
|
ruleDef : ('rule'|'\u89c4\u5219') STRING
|
|
attribute*
|
|
left
|
|
right
|
|
other?
|
|
('end'|'\u7ed3\u675f') ';'?
|
|
;
|
|
|
|
loopRuleDef : ('loopRule' | '\u5faa\u73af\u89c4\u5219') STRING
|
|
attribute*
|
|
loopTarget
|
|
loopStart?
|
|
left
|
|
right
|
|
other?
|
|
loopEnd?
|
|
('end'|'\u7ed3\u675f') ';'?
|
|
;
|
|
|
|
loopTarget : ('loopTarget' | '\u5faa\u73af\u5bf9\u8c61') complexValue ;
|
|
|
|
loopStart : ('loopStart' | '\u5f00\u59cb\u524d\u52a8\u4f5c') action* ;
|
|
|
|
loopEnd : ('loopEnd' | '\u7ed3\u675f\u540e\u52a8\u4f5c') action*;
|
|
|
|
|
|
attribute :loopAttribute
|
|
| salienceAttribute
|
|
| effectiveDateAttribute
|
|
| expiresDateAttribute
|
|
| enabledAttribute
|
|
| debugAttribute
|
|
| activationGroupAttribute
|
|
| agendaGroupAttribute
|
|
| autoFocusAttribute
|
|
| ruleflowGroupAttribute
|
|
;
|
|
|
|
loopAttribute : ('loop' | '\u5141\u8bb8\u5faa\u73af\u89e6\u53d1') '=' Boolean ','?;
|
|
salienceAttribute : ('salience' | '\u4f18\u5148\u7ea7') '=' NUMBER ','?;
|
|
effectiveDateAttribute : ('effective-date' | '\u751f\u6548\u65f6\u95f4' | '\u751f\u6548\u65e5\u671f') '=' STRING ','?;
|
|
expiresDateAttribute : ('expires-date' | '\u5931\u6548\u65f6\u95f4' | '\u5931\u6548\u65e5\u671f') '=' STRING ','?;
|
|
enabledAttribute : ('enabled' | '\u6fc0\u6d3b' | '\u542f\u7528') '=' Boolean ','?;
|
|
debugAttribute : ('debug' | '\u8c03\u8bd5' | '\u5141\u8bb8\u8c03\u8bd5') '=' Boolean ','?;
|
|
activationGroupAttribute : ('activation-group' | '\u6fc0\u6d3b\u7ec4') '=' STRING ','? ;
|
|
agendaGroupAttribute : ('agenda-group' | '\u8bae\u7a0b\u7ec4') '=' STRING ','? ;
|
|
autoFocusAttribute : ('auto-focus' | '\u81ea\u52a8\u83b7\u53d6\u7126\u70b9') '=' Boolean ','?;
|
|
ruleflowGroupAttribute : ('ruleflow-group' | '\u89c4\u5219\u6d41\u7ec4') '=' STRING ','?;
|
|
|
|
left :
|
|
('if'|'\u5982\u679c')
|
|
condition?
|
|
;
|
|
|
|
|
|
condition : leftParen condition rightParen #parenConditions
|
|
| condition (join condition)+ #multiConditions
|
|
| conditionLeft op (complexValue|nullValue) #singleCondition
|
|
| namedConditionSet #singleNamedConditionSet
|
|
;
|
|
|
|
namedConditionSet : (refName colon)? refObject leftParen namedCondition rightParen;
|
|
|
|
namedCondition : leftParen namedCondition rightParen #parenNamedConditions
|
|
| namedCondition (join namedCondition)+ #multiNamedConditions
|
|
| property op (complexValue|nullValue) #singleNamedConditions
|
|
;
|
|
|
|
|
|
decisionTableCellCondition : op (complexValue|nullValue) #singleCellCondition
|
|
| decisionTableCellCondition (join decisionTableCellCondition)+ #multiCellConditions
|
|
| leftParen decisionTableCellCondition rightParen #parenCellConditions
|
|
;
|
|
|
|
refName : Identifier ;
|
|
|
|
refObject : variableCategory | parameterName ;
|
|
|
|
|
|
nullValue : 'null';
|
|
|
|
conditionLeft : (variable|parameter|functionInvoke|methodInvoke|expEval|expAll|expExists|expCollect|commonFunction) (ARITH value)* ;
|
|
|
|
expEval : 'eval'leftParen expressionBody rightParen;
|
|
|
|
expAll : 'all'leftParen
|
|
(variable|parameter)
|
|
',' exprCondition
|
|
(',' (NUMBER|percent))?
|
|
rightParen;
|
|
|
|
expExists : 'exist'leftParen
|
|
(variable|parameter)
|
|
',' exprCondition
|
|
(',' (NUMBER|percent))?
|
|
rightParen;
|
|
|
|
expCollect : 'collect'leftParen
|
|
(variable|parameter)
|
|
(',' exprCondition)?
|
|
rightParen
|
|
'.'
|
|
( COUNT | property'.'(SUM|AVG|MAX|MIN))
|
|
;
|
|
|
|
commonFunction : Identifier leftParen complexValue(','property)? rightParen ;
|
|
|
|
|
|
exprCondition : property op (complexValue|nullValue)
|
|
| exprCondition (join exprCondition)+
|
|
;
|
|
|
|
expressionBody : .*? ;
|
|
|
|
percent : NUMBER'%';
|
|
|
|
leftParen : '(';
|
|
|
|
rightParen : ')';
|
|
|
|
colon : ':';
|
|
|
|
|
|
join :
|
|
AND
|
|
| OR
|
|
;
|
|
|
|
right : ('then'|'\u90a3\u4e48')
|
|
action*
|
|
;
|
|
other : ('else'|'\u5426\u5219')
|
|
action*
|
|
;
|
|
|
|
actions : action*;
|
|
|
|
action : assignAction ';'?
|
|
| outAction ';'?
|
|
| methodInvoke ';'?
|
|
| functionInvoke ';'?
|
|
| commonFunction ';'?
|
|
;
|
|
|
|
assignAction : (variable|namedVariable|parameter) '=' complexValue;
|
|
|
|
outAction : 'out''(' complexValue ')';
|
|
|
|
methodInvoke : beanMethod'('actionParameters?')';
|
|
|
|
functionInvoke : '@'Identifier'(' actionParameters? ')';
|
|
|
|
actionParameters : complexValue (',' complexValue)* ;
|
|
|
|
beanMethod : Identifier'.'Identifier ;
|
|
|
|
complexValue : value
|
|
| variable
|
|
| namedVariable
|
|
| constant
|
|
| variableCategory
|
|
| parameter
|
|
| methodInvoke
|
|
| functionInvoke
|
|
| commonFunction
|
|
| leftParen complexValue rightParen
|
|
| complexValue (ARITH complexValue)+
|
|
;
|
|
|
|
parameter : parameterName'.'Identifier;
|
|
|
|
parameterName : 'parameter'|'\u53c2\u6570' ;
|
|
|
|
constant : constantCategory'.'property;
|
|
|
|
variable : variableCategory'.'property;
|
|
|
|
namedVariable : namedVariableCategory'.'property;
|
|
|
|
property : Identifier('.'Identifier)*;
|
|
|
|
variableCategory : Identifier;
|
|
|
|
namedVariableCategory : '!'Identifier;
|
|
|
|
constantCategory : '$'Identifier;
|
|
|
|
value :
|
|
STRING
|
|
| NUMBER
|
|
| Boolean
|
|
;
|
|
op
|
|
:
|
|
GreaterThen
|
|
| GreaterThenOrEquals
|
|
| LessThen
|
|
| LessThenOrEquals
|
|
| Equals
|
|
| NotEquals
|
|
| EndWith
|
|
| NotEndWith
|
|
| StartWith
|
|
| NotStartWith
|
|
| In
|
|
| NotIn
|
|
| Match
|
|
| NotMatch
|
|
| EqualsIgnoreCase
|
|
| NotEqualsIgnoreCase
|
|
;
|