lex.g4
lexer grammar lex;
WS : [ \n\rw\t]+ -> skip;
LINE_COMMENT
: '//' ~[\r\n]* -> skip
;
ZS :
'/*'.*'*/' -> skip
;
TypeName:
'AssignmentStatement'
| 'Block'
| Statement
;
Statement:
'Statement'
|'ThrowStatement'
|'CallStatement'
|'ReturnStatement'
|'AssignmentStatement'
|'IfStatement'
|'WhileStatement'
|'DeclStatement'
| Block
| Function
;
Block:
'TryBlock'
|'CatchBlock'
|'FinallyBlock'
|'SynchronizedBlock'
|'SwitchBlock'
;
Function:
'Function'
|'FunctionCall'
| 'Class'
| 'Annotation'
| 'Type'
| 'String'
| 'FieldAccess'
| 'VariableAccess'
| 'Field'
| 'NullLiteral'
| 'BooleanLiteral'
| 'Variable'
| 'Expression'
| 'Null'
| 'Construct'
| 'Number'
| 'Location'
| 'Comment'
| 'Declaration'
| 'Operation'
;
Relation:
'is'
| 'in'
| 'contains'
| 'reachedBy'
| 'reaches'
| '==='
| '=='
| '!='
| '='
| '>='
| '<='
| '>'
| '<'
| 'startsWith'
| 'endsWith'
| 'matches'
;
Label:
TypeName (' 'Identify)? ':'
;
TypeSignatureLiteral:
'T' String
;
LeftBrack:
'['
;
RightBrack:
']'
;
Not:
('not')
;
And:
'and';
Or :
'or';
Left:
'('
;
Right:
')'
;
Point:
'*'
;
String:
'"' .*? '"'
;
Reference:
Identify ('[' Number ']')? ('.' Identify)*
;
Number:
[0-9]*
;
Identify:
[0-9a-zA-Z_/.]*
;
Boolean:
'true'|'false';
par.g4
grammar par;
//options {
// token=lex;
//}
prog:
label expression
;
expression:
literal # iteral
| relationExpression # Relation
| Reference # refrence
| Not expression # NotExpression
| expression andor=(And|Or) expression # ExpressionAndOrExpression
| '(' expression ')' # ExpressionAndBrack
;
relationExpression:
Relation Reference # relationRefrence
| Relation literal # relationLiteral
| Relation subRule # relationSubRule
| Relation String # relationString
| Reference Relation Reference # refrenceRelationRefrence
| Reference Relation literal # refrenceRelationLiteral
| Reference Relation subRule # refrenceRelationSubRule
| Reference Relation String # refrenceRelationString
| literal Relation Reference # literalRelationRefrence
| literal Relation literal # literalRelationLiteral
| literal Relation subRule # literalRelationSubRule
| literal Relation String # literalRelationString
;
subRule:
'[' label? expression? ']' Point?
;
literal:
Number #literalNumber
| Boolean #literalBoolean
| TypeSignatureLiteral #literalTypeSignatureLiteral
;
label:
TypeName (Reference)?':'
;
WS : [ \n\rw\t]+ -> skip;
LINE_COMMENT
: '//' ~[\r\n]* -> skip
;
ZS :
'/*'.*?'*/' -> skip
;
TypeName:
'AssignmentStatement'
| 'Block'
| Statement
;
Statement:
'Statement'
|'ThrowStatement'
|'CallStatement'
|'ReturnStatement'
|'AssignmentStatement'
|'IfStatement'
|'WhileStatement'
|'DeclStatement'
| Block
| Function
;
Block:
'TryBlock'
|'CatchBlock'
|'FinallyBlock'
|'SynchronizedBlock'
|'SwitchBlock'
;
Function:
'Function'
|'FunctionCall'
| 'Class'
| 'Annotation'
| 'Type'
| 'String'
| 'FieldAccess'
| 'VariableAccess'
| 'Field'
| 'NullLiteral'
| 'BooleanLiteral'
| 'Variable'
| 'Expression'
| 'Null'
| 'Construct'
| 'Number'
| 'Location'
| 'Comment'
| 'Declaration'
| 'Operation'
;
Relation:
'is'
| 'in'
| 'contains'
| 'reachedBy'
| 'reaches'
| '==='
| '=='
| '!='
| '='
| '>='
| '<='
| '>'
| '<'
| 'startsWith'
| 'endsWith'
| 'matches'
;
Space:
' '
;
TypeSignatureLiteral:
'T' String
;
Not:
'not'
;
And:
'and';
Or :
'or';
Colon:
':'
;
Point:
'*'
;
Number:
[0-9]*;
Reference:
Identify ('[' Number ']')? ('.' Identify)*
;
String:
'"' .*? '"'
;
Identify:
[0-9a-zA-Z_/.]*
;
//Identify:
//
// ;
Boolean:
'true'|'false';