|
|
|
|
@ -75,17 +75,19 @@ FLITERAL
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
fragment DECIMAL_FLOAT
|
|
|
|
|
: (('+' | '-')? (DIGIT+ '.' DIGIT* | '.' DIGIT+ | DIGIT+)
|
|
|
|
|
(('E' | 'e') ('+' | '-')? DIGIT+)?)
|
|
|
|
|
| (('+' | '-')? '0' [0-7]+ '.' [0-7]*
|
|
|
|
|
(('E' | 'e') ('+' | '-')? DIGIT+)?)
|
|
|
|
|
: ((DIGIT+ '.' DIGIT* | '.' DIGIT+)
|
|
|
|
|
(('E' | 'e') ('+' | '-')? DIGIT+)?)
|
|
|
|
|
| ((DIGIT+ '.' DIGIT* | '.' DIGIT+ | DIGIT+)
|
|
|
|
|
(('E' | 'e') ('+' | '-')? DIGIT+))
|
|
|
|
|
| ('0' [0-7]+ '.' [0-7]*
|
|
|
|
|
(('E' | 'e') ('+' | '-')? DIGIT+)?)
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
fragment HEX_FLOAT
|
|
|
|
|
: ('+' | '-')? '0' ('x' | 'X')
|
|
|
|
|
: '0' ('x' | 'X')
|
|
|
|
|
(HEXDIGIT* '.' HEXDIGIT+ | HEXDIGIT+ '.')
|
|
|
|
|
(('P' | 'p') ('+' | '-')? DIGIT+)
|
|
|
|
|
| ('+' | '-')? '0' ('x' | 'X')
|
|
|
|
|
| '0' ('x' | 'X')
|
|
|
|
|
HEXDIGIT+
|
|
|
|
|
(('P' | 'p') ('+' | '-')? DIGIT+)
|
|
|
|
|
;
|
|
|
|
|
@ -104,13 +106,14 @@ LINECOMMENT: '//' ~[\r\n]* -> skip;
|
|
|
|
|
BLOCKCOMMENT: '/*' .*? '*/' -> skip;
|
|
|
|
|
|
|
|
|
|
/*===-------------------------------------------===*/
|
|
|
|
|
/* Parser rules */
|
|
|
|
|
/* Syntax rules */
|
|
|
|
|
/*===-------------------------------------------===*/
|
|
|
|
|
|
|
|
|
|
compUnit
|
|
|
|
|
: (decl | funcDef)* EOF
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
// 声明
|
|
|
|
|
decl
|
|
|
|
|
: constDecl
|
|
|
|
|
| varDecl
|
|
|
|
|
@ -143,6 +146,7 @@ initValue
|
|
|
|
|
| LBRACE (initValue (COMMA initValue)*)? RBRACE
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
// 函数定义
|
|
|
|
|
funcDef
|
|
|
|
|
: funcType ID LPAREN (funcFParams)? RPAREN blockStmt
|
|
|
|
|
;
|
|
|
|
|
@ -161,6 +165,7 @@ funcFParam
|
|
|
|
|
: btype ID (LBRACK (exp)? RBRACK)*
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
// 语句
|
|
|
|
|
blockStmt
|
|
|
|
|
: LBRACE blockItem* RBRACE
|
|
|
|
|
;
|
|
|
|
|
@ -245,4 +250,3 @@ number
|
|
|
|
|
: ILITERAL
|
|
|
|
|
| FLITERAL
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|