Skip to content

Commit 6632c42

Browse files
committed
Update Antlr grammar files for script
1 parent e5d0b6a commit 6632c42

File tree

3 files changed

+118
-99
lines changed

3 files changed

+118
-99
lines changed

JSchema/RelogicLabs/JSchema/Grammar/JsonLexer.g4

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ fragment INTDIGIT : '0' | [1-9] DIGIT*;
2727
fragment EXPONENT : [eE] [+\-]? DIGIT+;
2828
fragment DIGIT : [0-9];
2929

30-
WHITE_SPACE : [\n\r\t ]+ -> skip;
30+
WHITE_SPACE : [\n\r\t ]+ -> skip;

JSchema/RelogicLabs/JSchema/Grammar/SchemaLexer.g4

Lines changed: 53 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,64 @@
11
lexer grammar SchemaLexer;
22

33
// Sections
4-
TITLE : '%title';
5-
VERSION : '%version';
6-
IMPORT : '%import';
7-
PRAGMA : '%pragma';
8-
DEFINE : '%define';
9-
SCHEMA : '%schema';
10-
SCRIPT : '%script' -> pushMode(DIRECTIVE_SCRIPT1);
4+
S_TITLE : '%title';
5+
S_VERSION : '%version';
6+
S_IMPORT : '%import';
7+
S_PRAGMA : '%pragma';
8+
S_DEFINE : '%define';
9+
S_SCHEMA : '%schema';
10+
S_SCRIPT : '%script' -> pushMode(DIRECTIVE_SCRIPT1);
1111

1212
// Keywords
13-
TRUE : 'true';
14-
FALSE : 'false';
15-
NULL : 'null';
13+
S_TRUE : 'true';
14+
S_FALSE : 'false';
15+
S_NULL : 'null';
1616

1717
// Symbols
18-
COLON : ':';
19-
COMMA : ',';
20-
STAR : '*';
21-
LBRACE : '{';
22-
RBRACE : '}';
23-
LBRACKET : '[';
24-
RBRACKET : ']';
25-
LPAREN : '(';
26-
RPAREN : ')';
27-
OPTIONAL : '?';
28-
UNDEFINED : '!';
18+
S_COLON : ':';
19+
S_COMMA : ',';
20+
S_STAR : '*';
21+
S_LBRACE : '{';
22+
S_RBRACE : '}';
23+
S_LBRACKET : '[';
24+
S_RBRACKET : ']';
25+
S_LPAREN : '(';
26+
S_RPAREN : ')';
27+
S_OPTIONAL : '?';
28+
S_UNDEFINED : '!';
2929

3030
// Identifiers
31-
FULL_IDENTIFIER : IDENTIFIER ( '.' IDENTIFIER )*;
32-
ALIAS : '$' IDENTIFIER;
33-
DATATYPE : '#' ALPHA+;
34-
FUNCTION : '@' IDENTIFIER;
35-
RECEIVER : '&' IDENTIFIER;
31+
S_GENERAL_ID : IDENTIFIER ( '.' IDENTIFIER )*;
32+
S_ALIAS : '$' IDENTIFIER;
33+
S_DATATYPE : '#' ALPHA+;
34+
S_FUNCTION : '@' IDENTIFIER;
35+
S_RECEIVER : '&' IDENTIFIER;
3636

3737
fragment IDENTIFIER : ALPHA ALPHANUMERIC*;
3838
fragment ALPHA : [A-Za-z_];
3939
fragment ALPHANUMERIC : [A-Za-z0-9_];
4040

4141
// String
42-
STRING : '"' ( ESCAPE | SAFE_CODEPOINT )* '"';
42+
S_STRING : '"' ( ESCAPE | SAFE_CODEPOINT )* '"';
4343
fragment ESCAPE : '\\' ( ["\\/bfnrt] | UNICODE );
4444
fragment UNICODE : 'u' HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT;
4545
fragment HEXDIGIT : [0-9a-fA-F];
4646
fragment SAFE_CODEPOINT : ~["\\\u0000-\u001F];
4747

4848
// Numbers
49-
INTEGER : '-'? INTDIGIT;
50-
FLOAT : INTEGER FRACTION;
51-
DOUBLE : INTEGER FRACTION? EXPONENT;
49+
S_INTEGER : '-'? INTDIGIT;
50+
S_FLOAT : S_INTEGER FRACTION;
51+
S_DOUBLE : S_INTEGER FRACTION? EXPONENT;
5252

5353
fragment FRACTION : '.' DIGIT+;
5454
fragment INTDIGIT : '0' | [1-9] DIGIT*;
5555
fragment EXPONENT : [eE] [+\-]? DIGIT+;
5656
fragment DIGIT : [0-9];
5757

5858
// Hidden Tokens
59-
WHITE_SPACE : [\n\r\t ]+ -> channel(HIDDEN);
60-
BLOCK_COMMENT : '/*' .*? '*/' -> channel(HIDDEN);
61-
LINE_COMMENT : '//' ~('\r' | '\n')* -> channel(HIDDEN);
59+
S_WHITE_SPACE : [\n\r\t ]+ -> channel(HIDDEN);
60+
S_BLOCK_COMMENT : '/*' .*? '*/' -> channel(HIDDEN);
61+
S_LINE_COMMENT : '//' ~('\r' | '\n')* -> channel(HIDDEN);
6262

6363
//---------------DIRECTIVE_SCRIPT1---------------
6464
mode DIRECTIVE_SCRIPT1;
@@ -98,11 +98,12 @@ G_IMPORT : 'import';
9898
G_CLASS : 'class';
9999
G_SUPER : 'super';
100100
G_DEFAULT : 'default';
101+
G_NOT : 'not';
101102

102103
// Literals
103-
G_INTEGER : INTEGER;
104-
G_DOUBLE : INTEGER FRACTION? EXPONENT?;
105-
G_STRING : STRING;
104+
G_INTEGER : S_INTEGER;
105+
G_DOUBLE : S_INTEGER FRACTION? EXPONENT?;
106+
G_STRING : S_STRING;
106107
G_IDENTIFIER : IDENTIFIER;
107108

108109
// Separator Symbols
@@ -127,22 +128,29 @@ G_PLUS : '+';
127128
G_MINUS : '-';
128129
G_MUL : '*';
129130
G_DIV : '/';
131+
G_MOD : '%';
130132
G_GT : '>';
131133
G_LT : '<';
132134
G_LE : '<=';
133135
G_GE : '>=';
134136
G_EQ : '==';
135137
G_NE : '!=';
136-
G_NOT : '!';
137-
G_AND : '&&';
138-
G_OR : '||';
138+
G_LNOT : '!';
139+
G_LAND : '&&';
140+
G_LOR : '||';
141+
142+
G_ADD_ASSIGN : '+=';
143+
G_SUB_ASSIGN : '-=';
144+
G_MUL_ASSIGN : '*=';
145+
G_DIV_ASSIGN : '/=';
146+
G_MOD_ASSIGN : '%=';
139147

140148
// Next Sections
141-
DEFINE1 : '%define' -> type(DEFINE), popMode;
142-
SCHEMA1 : '%schema' -> type(SCHEMA), popMode;
143-
SCRIPT1 : '%script' -> type(SCRIPT);
149+
G_DEFINE : '%define' -> type(S_DEFINE), popMode;
150+
G_SCHEMA : '%schema' -> type(S_SCHEMA), popMode;
151+
G_SCRIPT : '%script' -> type(S_SCRIPT);
144152

145153
// Hidden Tokens
146-
WHITE_SPACE1 : WHITE_SPACE -> channel(HIDDEN);
147-
BLOCK_COMMENT1 : BLOCK_COMMENT -> channel(HIDDEN);
148-
LINE_COMMENT1 : LINE_COMMENT -> channel(HIDDEN);
154+
G_WHITE_SPACE : S_WHITE_SPACE -> channel(HIDDEN);
155+
G_BLOCK_COMMENT : S_BLOCK_COMMENT -> channel(HIDDEN);
156+
G_LINE_COMMENT : S_LINE_COMMENT -> channel(HIDDEN);

JSchema/RelogicLabs/JSchema/Grammar/SchemaParser.g4

Lines changed: 64 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -6,48 +6,48 @@ options { tokenVocab = SchemaLexer; }
66
schema
77
: titleNode? versionNode? ( importNode | pragmaNode )*
88
( defineNode | scriptNode )*
9-
schemaMain
9+
schemaCoreNode
1010
( defineNode | scriptNode )* EOF # CompleteSchema
1111
| validatorNode EOF # ShortSchema
1212
;
1313

14-
schemaMain
15-
: SCHEMA COLON validatorNode
14+
schemaCoreNode
15+
: S_SCHEMA S_COLON validatorNode
1616
;
1717

1818
titleNode
19-
: TITLE COLON STRING
19+
: S_TITLE S_COLON S_STRING
2020
;
2121

2222
versionNode
23-
: VERSION COLON STRING
23+
: S_VERSION S_COLON S_STRING
2424
;
2525

2626
importNode
27-
: IMPORT COLON FULL_IDENTIFIER ( COMMA FULL_IDENTIFIER )?
27+
: S_IMPORT S_COLON S_GENERAL_ID ( S_COMMA S_GENERAL_ID )?
2828
;
2929

3030
pragmaNode
31-
: PRAGMA FULL_IDENTIFIER COLON primitiveNode
31+
: S_PRAGMA S_GENERAL_ID S_COLON primitiveNode
3232
;
3333

3434
defineNode
35-
: DEFINE aliasNode COLON validatorMain
35+
: S_DEFINE aliasNode S_COLON validatorMainNode
3636
;
3737

38-
aliasNode
39-
: ALIAS
38+
validatorNode
39+
: validatorMainNode
40+
| aliasNode
4041
;
4142

42-
validatorMain
43-
: valueNode functionNode* datatypeNode* receiverNode* OPTIONAL?
44-
| functionNode+ datatypeNode* receiverNode* OPTIONAL?
45-
| datatypeNode+ receiverNode* OPTIONAL?
43+
validatorMainNode
44+
: valueNode functionNode* datatypeNode* receiverNode* S_OPTIONAL?
45+
| functionNode+ datatypeNode* receiverNode* S_OPTIONAL?
46+
| datatypeNode+ receiverNode* S_OPTIONAL?
4647
;
4748

48-
validatorNode
49-
: validatorMain
50-
| aliasNode
49+
aliasNode
50+
: S_ALIAS
5151
;
5252

5353
valueNode
@@ -57,27 +57,27 @@ valueNode
5757
;
5858

5959
receiverNode
60-
: RECEIVER
60+
: S_RECEIVER
6161
;
6262

6363
objectNode
64-
: LBRACE ( propertyNode ( COMMA propertyNode )* )? RBRACE
64+
: S_LBRACE ( propertyNode ( S_COMMA propertyNode )* )? S_RBRACE
6565
;
6666

6767
propertyNode
68-
: STRING COLON validatorNode
68+
: S_STRING S_COLON validatorNode
6969
;
7070

7171
arrayNode
72-
: LBRACKET ( validatorNode ( COMMA validatorNode )* )? RBRACKET
72+
: S_LBRACKET ( validatorNode ( S_COMMA validatorNode )* )? S_RBRACKET
7373
;
7474

7575
datatypeNode
76-
: DATATYPE STAR? ( LPAREN aliasNode RPAREN )?
76+
: S_DATATYPE S_STAR? ( S_LPAREN aliasNode S_RPAREN )?
7777
;
7878

7979
functionNode
80-
: FUNCTION STAR? ( LPAREN ( argumentNode ( COMMA argumentNode )* )? RPAREN )?
80+
: S_FUNCTION S_STAR? ( S_LPAREN ( argumentNode ( S_COMMA argumentNode )* )? S_RPAREN )?
8181
;
8282

8383
argumentNode
@@ -86,20 +86,20 @@ argumentNode
8686
;
8787

8888
primitiveNode
89-
: TRUE # PrimitiveTrue
90-
| FALSE # PrimitiveFalse
91-
| STRING # PrimitiveString
92-
| INTEGER # PrimitiveInteger
93-
| FLOAT # PrimitiveFloat
94-
| DOUBLE # PrimitiveDouble
95-
| NULL # PrimitiveNull
96-
| UNDEFINED # PrimitiveUndefined
89+
: S_TRUE # TrueNode
90+
| S_FALSE # FalseNode
91+
| S_STRING # StringNode
92+
| S_INTEGER # IntegerNode
93+
| S_FLOAT # FloatNode
94+
| S_DOUBLE # DoubleNode
95+
| S_NULL # NullNode
96+
| S_UNDEFINED # UndefinedNode
9797
;
9898

9999

100100
//---------------Script Rules---------------
101101
scriptNode
102-
: SCRIPT G_COLON G_LBRACE globalStatement+ G_RBRACE
102+
: S_SCRIPT G_COLON G_LBRACE globalStatement+ G_RBRACE
103103
;
104104

105105
globalStatement
@@ -127,10 +127,10 @@ functionDeclaration
127127
;
128128

129129
varStatement
130-
: G_VAR varInitialization ( G_COMMA varInitialization )* G_SEMI
130+
: G_VAR varDeclaration ( G_COMMA varDeclaration )* G_SEMI
131131
;
132132

133-
varInitialization
133+
varDeclaration
134134
: G_IDENTIFIER ( G_ASSIGN expression )?
135135
;
136136

@@ -173,37 +173,48 @@ blockStatement
173173
;
174174

175175
expression
176-
: refExpression # AllRefExpression
176+
: expression G_LBRACKET expression G_RBRACKET # MemberBracketExpression
177+
| expression G_DOT G_IDENTIFIER # MemberDotExpression
178+
| G_IDENTIFIER G_LPAREN ( expression ( G_COMMA expression )* )? G_RPAREN # InvokeFunctionExpression
179+
| expression G_DOT G_IDENTIFIER
180+
G_LPAREN ( expression ( G_COMMA expression )* )? G_RPAREN # InvokeMethodExpression
181+
| G_PLUS expression # UnaryPlusExpression
177182
| G_MINUS expression # UnaryMinusExpression
178-
| G_NOT expression # LogicalNotExpression
179-
| refExpression G_INC # PostIncrementExpression
180-
| refExpression G_DEC # PostDecrementExpression
181-
| G_INC refExpression # PreIncrementExpression
182-
| G_DEC refExpression # PreDecrementExpression
183-
| expression ( G_MUL | G_DIV ) expression # MultiplicativeExpression
183+
| G_LNOT expression # LogicalNotExpression
184+
| expression G_LBRACKET expression G_RBRACKET ( G_INC | G_DEC ) # PostIncDecExpression
185+
| expression G_DOT G_IDENTIFIER ( G_INC | G_DEC ) # PostIncDecExpression
186+
| G_IDENTIFIER ( G_INC | G_DEC ) # PostIncDecExpression
187+
| ( G_INC | G_DEC ) expression G_LBRACKET expression G_RBRACKET # PreIncDecExpression
188+
| ( G_INC | G_DEC ) expression G_DOT G_IDENTIFIER # PreIncDecExpression
189+
| ( G_INC | G_DEC ) G_IDENTIFIER # PreIncDecExpression
190+
| expression ( G_MUL | G_DIV | G_MOD ) expression # MultiplicativeExpression
184191
| expression ( G_PLUS | G_MINUS ) expression # AdditiveExpression
185192
| expression G_RANGE expression? # RangeBothExpression
186193
| G_RANGE expression # RangeEndExpression
187194
| expression ( G_GE | G_LE | G_GT | G_LT ) expression # RelationalExpression
188195
| expression ( G_EQ | G_NE ) expression # EqualityExpression
189-
| expression G_AND expression # LogicalAndExpression
190-
| expression G_OR expression # LogicalOrExpression
191-
| refExpression G_ASSIGN expression # AssignmentExpression
196+
| expression G_LAND expression # LogicalAndExpression
197+
| expression G_LOR expression # LogicalOrExpression
198+
| expression G_LBRACKET expression G_RBRACKET G_ASSIGN expression # AssignmentBracketExpression
199+
| expression G_DOT G_IDENTIFIER G_ASSIGN expression # AssignmentDotExpression
200+
| G_IDENTIFIER G_ASSIGN expression # AssignmentIdExpression
201+
| expression G_LBRACKET expression G_RBRACKET
202+
( G_ADD_ASSIGN | G_SUB_ASSIGN | G_MUL_ASSIGN
203+
| G_DIV_ASSIGN | G_MOD_ASSIGN ) expression # AssignmentAugExpression
204+
| expression G_DOT G_IDENTIFIER
205+
( G_ADD_ASSIGN | G_SUB_ASSIGN | G_MUL_ASSIGN
206+
| G_DIV_ASSIGN | G_MOD_ASSIGN ) expression # AssignmentAugExpression
207+
| G_IDENTIFIER ( G_ADD_ASSIGN | G_SUB_ASSIGN | G_MUL_ASSIGN
208+
| G_DIV_ASSIGN | G_MOD_ASSIGN ) expression # AssignmentAugExpression
209+
| G_TARGET # TargetExpression
210+
| G_CALLER # CallerExpression
211+
| G_IDENTIFIER # IdentifierExpression
192212
| literal # LiteralExpression
193213
| G_LPAREN expression G_RPAREN # ParenthesizedExpression
194214
| G_TRYOF G_LPAREN expression G_RPAREN # TryofExpression
195215
| G_THROW G_LPAREN expression ( G_COMMA expression )? G_RPAREN # ThrowExpression
196216
;
197217

198-
refExpression
199-
: refExpression G_DOT G_IDENTIFIER # DotExpression
200-
| refExpression G_LBRACKET expression G_RBRACKET # IndexExpression
201-
| G_IDENTIFIER G_LPAREN ( expression ( G_COMMA expression )* )? G_RPAREN # InvokeExpression
202-
| G_TARGET # TargetExpression
203-
| G_CALLER # CallerExpression
204-
| G_IDENTIFIER # IdentifierExpression
205-
;
206-
207218
literal
208219
: G_TRUE # TrueLiteral
209220
| G_FALSE # FalseLiteral

0 commit comments

Comments
 (0)