|
|
|
|
@ -69,6 +69,35 @@ fragment HEX_LITERAL
|
|
|
|
|
: '0' ('x' | 'X') [0-9a-fA-F]+
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
// 浮点字面量
|
|
|
|
|
FLITERAL
|
|
|
|
|
: (DECIMAL_FLOAT | HEX_FLOAT)
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
fragment DECIMAL_FLOAT
|
|
|
|
|
: (('+' | '-')? (DIGIT+ '.' DIGIT* | '.' DIGIT+ | DIGIT+)
|
|
|
|
|
(('E' | 'e') ('+' | '-')? DIGIT+)?)
|
|
|
|
|
| (('+' | '-')? '0' [0-7]+ '.' [0-7]*
|
|
|
|
|
(('E' | 'e') ('+' | '-')? DIGIT+)?)
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
fragment HEX_FLOAT
|
|
|
|
|
: ('+' | '-')? '0' ('x' | 'X')
|
|
|
|
|
(HEXDIGIT* '.' HEXDIGIT+ | HEXDIGIT+ '.')
|
|
|
|
|
(('P' | 'p') ('+' | '-')? DIGIT+)
|
|
|
|
|
| ('+' | '-')? '0' ('x' | 'X')
|
|
|
|
|
HEXDIGIT+
|
|
|
|
|
(('P' | 'p') ('+' | '-')? DIGIT+)
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
fragment DIGIT
|
|
|
|
|
: [0-9]
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
fragment HEXDIGIT
|
|
|
|
|
: [0-9a-fA-F]
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
// 空白和注释
|
|
|
|
|
WS: [ \t\r\n] -> skip;
|
|
|
|
|
LINECOMMENT: '//' ~[\r\n]* -> skip;
|
|
|
|
|
@ -102,19 +131,20 @@ btype
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
constDef
|
|
|
|
|
: ID ASSIGN initValue
|
|
|
|
|
: ID (LBRACK exp RBRACK)* ASSIGN initValue
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
varDef
|
|
|
|
|
: ID (ASSIGN initValue)?
|
|
|
|
|
: ID (LBRACK exp RBRACK)* (ASSIGN initValue)?
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
initValue
|
|
|
|
|
: exp
|
|
|
|
|
| LBRACE (initValue (COMMA initValue)*)? RBRACE
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
funcDef
|
|
|
|
|
: funcType ID LPAREN RPAREN blockStmt
|
|
|
|
|
: funcType ID LPAREN (funcFParams)? RPAREN blockStmt
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
funcType
|
|
|
|
|
@ -123,6 +153,14 @@ funcType
|
|
|
|
|
| VOID
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
funcFParams
|
|
|
|
|
: funcFParam (COMMA funcFParam)*
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
funcFParam
|
|
|
|
|
: btype ID (LBRACK (exp)? RBRACK)*
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
blockStmt
|
|
|
|
|
: LBRACE blockItem* RBRACE
|
|
|
|
|
;
|
|
|
|
|
@ -147,9 +185,11 @@ exp
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
lValue
|
|
|
|
|
: ID
|
|
|
|
|
: ID (LBRACK exp RBRACK)*
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
number
|
|
|
|
|
: ILITERAL
|
|
|
|
|
| FLITERAL
|
|
|
|
|
;
|
|
|
|
|
|
|
|
|
|
|