feat: 扩展浮点数、数组语法和函数参数支持

杨力嘉 2 weeks ago committed by CGH0S7
parent e9abb3e36d
commit 8ba262fea6

@ -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
;

Loading…
Cancel
Save