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