-
-
Notifications
You must be signed in to change notification settings - Fork 38
/
Copy pathLua.g4
61 lines (44 loc) · 1.31 KB
/
Lua.g4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
grammar Lua;
dictionary: '{' field (',' field)* '}' ;
array: '{' value (',' value)* '}' ;
field: key '=' value;
key: '[' string ']' | '[' number ']' | NAME ;
value: nil | bool | number | string | array | dictionary;
nil: 'nil';
bool: 'true' | 'false';
number: INT | HEX | FLOAT | HEX_FLOAT ;
string: NORMALSTRING | CHARSTRING ;
NAME: [a-zA-Z_][a-zA-Z_0-9]* ;
NORMALSTRING: '"' ( EscapeSequence | ~('\\'|'"') )* '"' ;
CHARSTRING: '\'' ( EscapeSequence | ~('\''|'\\') )* '\'' ;
INT: '-'? Digit+ ;
HEX: '-'? '0' [xX] HexDigit+ ;
FLOAT
: '-'? Digit+ '.' Digit* ExponentPart?
| '-'? '.' Digit+ ExponentPart?
| '-'? Digit+ ExponentPart
;
HEX_FLOAT
: '-'? '0' [xX] HexDigit+ '.' HexDigit* HexExponentPart?
| '-'? '0' [xX] '.' HexDigit+ HexExponentPart?
| '-'? '0' [xX] HexDigit+ HexExponentPart
;
fragment ExponentPart: [eE] [+-]? Digit+ ;
fragment HexExponentPart: [pP] [+-]? Digit+ ;
fragment EscapeSequence
: '\\' [abfnrtvz"'\\]
| '\\' '\r'? '\n'
| DecimalEscape
| HexEscape
| UtfEscape
;
fragment DecimalEscape
: '\\' Digit
| '\\' Digit Digit
| '\\' [0-2] Digit Digit
;
fragment HexEscape: '\\' 'x' HexDigit HexDigit ;
fragment UtfEscape: '\\' 'u{' HexDigit+ '}' ;
fragment Digit: [0-9] ;
fragment HexDigit: [0-9a-fA-F] ;
WS: [ \t\u000C\r\n]+ -> skip ;