feat: 扩展浮点数、数组语法和函数参数支持
This commit is contained in:
@@ -69,6 +69,35 @@ fragment HEX_LITERAL
|
|||||||
: '0' ('x' | 'X') [0-9a-fA-F]+
|
: '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;
|
WS: [ \t\r\n] -> skip;
|
||||||
LINECOMMENT: '//' ~[\r\n]* -> skip;
|
LINECOMMENT: '//' ~[\r\n]* -> skip;
|
||||||
@@ -102,19 +131,20 @@ btype
|
|||||||
;
|
;
|
||||||
|
|
||||||
constDef
|
constDef
|
||||||
: ID ASSIGN initValue
|
: ID (LBRACK exp RBRACK)* ASSIGN initValue
|
||||||
;
|
;
|
||||||
|
|
||||||
varDef
|
varDef
|
||||||
: ID (ASSIGN initValue)?
|
: ID (LBRACK exp RBRACK)* (ASSIGN initValue)?
|
||||||
;
|
;
|
||||||
|
|
||||||
initValue
|
initValue
|
||||||
: exp
|
: exp
|
||||||
|
| LBRACE (initValue (COMMA initValue)*)? RBRACE
|
||||||
;
|
;
|
||||||
|
|
||||||
funcDef
|
funcDef
|
||||||
: funcType ID LPAREN RPAREN blockStmt
|
: funcType ID LPAREN (funcFParams)? RPAREN blockStmt
|
||||||
;
|
;
|
||||||
|
|
||||||
funcType
|
funcType
|
||||||
@@ -123,6 +153,14 @@ funcType
|
|||||||
| VOID
|
| VOID
|
||||||
;
|
;
|
||||||
|
|
||||||
|
funcFParams
|
||||||
|
: funcFParam (COMMA funcFParam)*
|
||||||
|
;
|
||||||
|
|
||||||
|
funcFParam
|
||||||
|
: btype ID (LBRACK (exp)? RBRACK)*
|
||||||
|
;
|
||||||
|
|
||||||
blockStmt
|
blockStmt
|
||||||
: LBRACE blockItem* RBRACE
|
: LBRACE blockItem* RBRACE
|
||||||
;
|
;
|
||||||
@@ -147,9 +185,11 @@ exp
|
|||||||
;
|
;
|
||||||
|
|
||||||
lValue
|
lValue
|
||||||
: ID
|
: ID (LBRACK exp RBRACK)*
|
||||||
;
|
;
|
||||||
|
|
||||||
number
|
number
|
||||||
: ILITERAL
|
: ILITERAL
|
||||||
|
| FLITERAL
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user