Skip to content

Commit 2fefce4

Browse files
committed
Update schema and script grammars
1 parent 9ed9dc0 commit 2fefce4

File tree

5 files changed

+383
-13
lines changed

5 files changed

+383
-13
lines changed

src/main/java/com/relogiclabs/json/schema/internal/grammar/JsonLexer.g4 renamed to src/main/java/com/relogiclabs/jschema/internal/grammar/JsonLexer.g4

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

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

src/main/java/com/relogiclabs/json/schema/internal/grammar/JsonParser.g4 renamed to src/main/java/com/relogiclabs/jschema/internal/grammar/JsonParser.g4

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,28 @@ parser grammar JsonParser;
33
options { tokenVocab = JsonLexer; }
44

55
json
6-
: value EOF
6+
: valueNode EOF
77
;
88

9-
value
10-
: primitive
11-
| object
12-
| array
9+
valueNode
10+
: primitiveNode
11+
| objectNode
12+
| arrayNode
1313
;
1414

15-
object
16-
: LBRACE (property (COMMA property)*)? RBRACE
15+
objectNode
16+
: LBRACE ( propertyNode ( COMMA propertyNode )* )? RBRACE
1717
;
1818

19-
property
20-
: STRING COLON value
19+
propertyNode
20+
: STRING COLON valueNode
2121
;
2222

23-
array
24-
: LBRACKET (value (COMMA value)*)? RBRACKET
23+
arrayNode
24+
: LBRACKET ( valueNode ( COMMA valueNode )* )? RBRACKET
2525
;
2626

27-
primitive
27+
primitiveNode
2828
: TRUE # PrimitiveTrue
2929
| FALSE # PrimitiveFalse
3030
| STRING # PrimitiveString
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
lexer grammar SchemaLexer;
2+
3+
// 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);
11+
12+
// Keywords
13+
TRUE : 'true';
14+
FALSE : 'false';
15+
NULL : 'null';
16+
17+
// Symbols
18+
COLON : ':';
19+
COMMA : ',';
20+
STAR : '*';
21+
LBRACE : '{';
22+
RBRACE : '}';
23+
LBRACKET : '[';
24+
RBRACKET : ']';
25+
LPAREN : '(';
26+
RPAREN : ')';
27+
OPTIONAL : '?';
28+
UNDEFINED : '!';
29+
30+
// Identifiers
31+
FULL_IDENTIFIER : IDENTIFIER ( '.' IDENTIFIER )*;
32+
ALIAS : '$' IDENTIFIER;
33+
DATATYPE : '#' ALPHA+;
34+
FUNCTION : '@' IDENTIFIER;
35+
RECEIVER : '&' IDENTIFIER;
36+
37+
fragment IDENTIFIER : ALPHA ALPHANUMERIC*;
38+
fragment ALPHA : [A-Za-z_];
39+
fragment ALPHANUMERIC : [A-Za-z0-9_];
40+
41+
// String
42+
STRING : '"' ( ESCAPE | SAFE_CODEPOINT )* '"';
43+
fragment ESCAPE : '\\' ( ["\\/bfnrt] | UNICODE );
44+
fragment UNICODE : 'u' HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT;
45+
fragment HEXDIGIT : [0-9a-fA-F];
46+
fragment SAFE_CODEPOINT : ~["\\\u0000-\u001F];
47+
48+
// Numbers
49+
INTEGER : '-'? INTDIGIT;
50+
FLOAT : INTEGER FRACTION;
51+
DOUBLE : INTEGER FRACTION? EXPONENT;
52+
53+
fragment FRACTION : '.' DIGIT+;
54+
fragment INTDIGIT : '0' | [1-9] DIGIT*;
55+
fragment EXPONENT : [eE] [+\-]? DIGIT+;
56+
fragment DIGIT : [0-9];
57+
58+
// Hidden Tokens
59+
WHITE_SPACE : [\n\r\t ]+ -> channel(HIDDEN);
60+
BLOCK_COMMENT : '/*' .*? '*/' -> channel(HIDDEN);
61+
LINE_COMMENT : '//' ~('\r' | '\n')* -> channel(HIDDEN);
62+
63+
//---------------DIRECTIVE_SCRIPT1---------------
64+
mode DIRECTIVE_SCRIPT1;
65+
66+
// Keywords
67+
G_VAR : 'var';
68+
G_IF : 'if';
69+
G_ELSE : 'else';
70+
G_WHILE : 'while';
71+
G_FOR : 'for';
72+
G_FOREACH : 'foreach';
73+
G_IN : 'in';
74+
G_BREAK : 'break';
75+
G_CONSTRAINT : 'constraint';
76+
G_TARGET : 'target';
77+
G_CALLER : 'caller';
78+
G_SUBROUTINE : 'subroutine';
79+
G_TRYOF : 'tryof';
80+
G_THROW : 'throw';
81+
G_FUNCTION : 'function';
82+
G_RETURN : 'return';
83+
G_FUTURE : 'future';
84+
G_TRUE : 'true';
85+
G_FALSE : 'false';
86+
G_NULL : 'null';
87+
G_UNDEFINED : 'undefined';
88+
89+
// Reserved Keywords
90+
G_THIS : 'this';
91+
G_NEW : 'new';
92+
G_CONTINUE : 'continue';
93+
G_DO : 'do';
94+
G_CONST : 'const';
95+
G_SWITCH : 'switch';
96+
G_CASE : 'case';
97+
G_IMPORT : 'import';
98+
G_CLASS : 'class';
99+
G_SUPER : 'super';
100+
G_DEFAULT : 'default';
101+
102+
// Literals
103+
G_INTEGER : INTEGER;
104+
G_DOUBLE : INTEGER FRACTION? EXPONENT?;
105+
G_STRING : STRING;
106+
G_IDENTIFIER : IDENTIFIER;
107+
108+
// Separator Symbols
109+
G_LBRACE : '{';
110+
G_RBRACE : '}';
111+
G_LBRACKET : '[';
112+
G_RBRACKET : ']';
113+
G_LPAREN : '(';
114+
G_RPAREN : ')';
115+
G_SEMI : ';';
116+
G_COMMA : ',';
117+
G_DOT : '.';
118+
G_COLON : ':';
119+
G_RANGE : '..';
120+
G_ELLIPSIS : '...';
121+
122+
// Operator Symbols
123+
G_ASSIGN : '=';
124+
G_INC : '++';
125+
G_DEC : '--';
126+
G_PLUS : '+';
127+
G_MINUS : '-';
128+
G_MUL : '*';
129+
G_DIV : '/';
130+
G_GT : '>';
131+
G_LT : '<';
132+
G_LE : '<=';
133+
G_GE : '>=';
134+
G_EQ : '==';
135+
G_NE : '!=';
136+
G_NOT : '!';
137+
G_AND : '&&';
138+
G_OR : '||';
139+
140+
// Next Sections
141+
DEFINE1 : '%define' -> type(DEFINE), popMode;
142+
SCHEMA1 : '%schema' -> type(SCHEMA), popMode;
143+
SCRIPT1 : '%script' -> type(SCRIPT), popMode;
144+
145+
// Hidden Tokens
146+
WHITE_SPACE1 : WHITE_SPACE -> channel(HIDDEN);
147+
BLOCK_COMMENT1 : BLOCK_COMMENT -> channel(HIDDEN);
148+
LINE_COMMENT1 : LINE_COMMENT -> channel(HIDDEN);

0 commit comments

Comments
 (0)