Compare commits

..

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

@ -43,6 +43,9 @@ 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](
@ -69,8 +72,18 @@ 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]*
; ;
@ -90,7 +103,11 @@ BLOCK_COMMENT
//----语法规则----// //----语法规则----//
compUnit compUnit
: (funcDef|decl)+ EOF : (funcDef|decl|program) EOF
;
program
: (decl|funcDef)+
; ;
decl decl
@ -118,6 +135,7 @@ constInitVal
varDecl varDecl
: bType varDef (Comma varDef)* Semi : bType varDef (Comma varDef)* Semi
| Int Ident (Assign exp)? Semi
; ;
varDef varDef
@ -164,7 +182,11 @@ stmt
| While L_PAREN cond R_PAREN stmt | While L_PAREN cond R_PAREN stmt
| Break Semi | Break Semi
| Continue Semi | Continue Semi
| Return (exp)? Semi | returnStmt
;
returnStmt
: Return (exp)? Semi
; ;
exp exp
@ -179,19 +201,21 @@ lVal
: Ident (L_BRACK exp R_BRACK)* : Ident (L_BRACK exp R_BRACK)*
; ;
primaryExp primary
: 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
: primaryExp : primary
| Ident L_PAREN (funcRParams)? R_PAREN | Ident L_PAREN (funcRParams)? R_PAREN
| unaryOp unaryExp | unaryOp unaryExp
; ;
@ -214,6 +238,7 @@ mulExp
addExp addExp
: mulExp : mulExp
| addExp (AddOp|SubOp) mulExp | addExp (AddOp|SubOp) mulExp
| primary (AddOp primary)*
; ;
relExp relExp
@ -238,4 +263,4 @@ lOrExp
constExp constExp
: addExp : addExp
; ;
Loading…
Cancel
Save