Compare commits

..

No commits in common. 'feature/lab2' and 'master' have entirely different histories.

@ -43,6 +43,9 @@ R_BRACK : ']';
L_BRACE : '{';
R_BRACE : '}';
//const numeric classes
//Number... change
// float first
// 16进制float first
HEX_FLOAT
: '0' [xX](
@ -69,8 +72,18 @@ HEX_INT: '0' [xX] [0-9a-fA-F]+; //16进制
OCTAL_INT: '0' [0-7]*; //8进制
DECIMAL_INT: [1-9][0-9]*; //10进制
ZERO: '0'; //单独0
// TODO: 后续完善IR后移除Number兼容规则
Number
: HEX_FLOAT
| DEC_FLOAT
| HEX_INT
| OCTAL_INT
| DECIMAL_INT
| ZERO
;
// 标识符
// 标识符(放最后)
Ident
: [a-zA-Z_][a-zA-Z_0-9]*
;
@ -90,7 +103,11 @@ BLOCK_COMMENT
//----语法规则----//
compUnit
: (funcDef|decl)+ EOF
: (funcDef|decl|program) EOF
;
program
: (decl|funcDef)+
;
decl
@ -118,6 +135,7 @@ constInitVal
varDecl
: bType varDef (Comma varDef)* Semi
| Int Ident (Assign exp)? Semi
;
varDef
@ -164,7 +182,11 @@ stmt
| While L_PAREN cond R_PAREN stmt
| Break Semi
| Continue Semi
| Return (exp)? Semi
| returnStmt
;
returnStmt
: Return (exp)? Semi
;
exp
@ -179,19 +201,21 @@ lVal
: Ident (L_BRACK exp R_BRACK)*
;
primaryExp
primary
: L_PAREN exp R_PAREN
| lVal
| Number // 让旧代码能用
| HEX_FLOAT
| DEC_FLOAT
| HEX_INT
| OCTAL_INT
| DECIMAL_INT
| ZERO
| Ident
;
unaryExp
: primaryExp
: primary
| Ident L_PAREN (funcRParams)? R_PAREN
| unaryOp unaryExp
;
@ -214,6 +238,7 @@ mulExp
addExp
: mulExp
| addExp (AddOp|SubOp) mulExp
| primary (AddOp primary)*
;
relExp
@ -238,4 +263,4 @@ lOrExp
constExp
: addExp
;
;
Loading…
Cancel
Save