merge error

Oliveira 1 week ago
parent c858f75d9a
commit 02e5a7d4e7

@ -47,48 +47,44 @@ MUL: '*';
DIV: '/';
MOD: '%';
NOT: '!';
SUB: '-';
MUL: '*';
DIV: '/';
MOD: '%';
EQ: '==';
NEQ: '!=';
LT: '<';
GT: '>';
LE: '<=';
GE: '>=';
NOT: '!';
AND: '&&';
OR: '||';
LPAREN: '(';
RPAREN: ')';
LBRACK: '[';
RBRACK: ']';
LBRACK: '[';
RBRACK: ']';
LBRACE: '{';
RBRACE: '}';
COMMA: ',';
COMMA: ',';
SEMICOLON: ';';
ID: [a-zA-Z_][a-zA-Z_0-9]*;
ILITERAL
: '0' | [1-9][0-9]* // Decimal
| '0' [0-7]+ // Octal
| ('0x' | '0X') [0-9a-fA-F]+ // Hex
HEX_FLOAT_LITERAL
: ('0x' | '0X') HEX_DIGIT* '.' HEX_DIGIT+ BINARY_EXPONENT
| ('0x' | '0X') HEX_DIGIT+ '.' HEX_DIGIT* BINARY_EXPONENT
| ('0x' | '0X') HEX_DIGIT+ BINARY_EXPONENT
;
DEC_FLOAT_LITERAL
: DEC_DIGIT+ '.' DEC_DIGIT* DEC_EXPONENT?
| '.' DEC_DIGIT+ DEC_EXPONENT?
| DEC_DIGIT+ DEC_EXPONENT
;
HEX_INT_LITERAL
: ('0x' | '0X') HEX_DIGIT+
;
OCT_INT_LITERAL
: '0' OCT_DIGIT+
;
FLITERAL
: ([0-9]* '.' [0-9]+ | [0-9]+ '.') ([eE] [+-]? [0-9]+)?
| [0-9]+ [eE] [+-]? [0-9]+
| ('0x'|'0X') ([0-9a-fA-F]* '.' [0-9a-fA-F]+ | [0-9a-fA-F]+ '.') ([pP] [+-]? [0-9]+)?
| ('0x'|'0X') [0-9a-fA-F]+ [pP] [+-]? [0-9]+
DEC_INT_LITERAL
: '0'
| [1-9] DEC_DIGIT*
;
WS: [ \t\r\n]+ -> skip;
WS: [ \t\r\n] -> skip;
LINECOMMENT: '//' ~[\r\n]* -> skip;
BLOCKCOMMENT: '/*' .*? '*/' -> skip;
@ -130,16 +126,7 @@ bType
;
constDef
: ID (LBRACK constExp RBRACK)* ASSIGN constInitVal
;
constInitVal
: constExp
| LBRACE (constInitVal (COMMA constInitVal)*)? RBRACE
;
varDecl
: btype varDef (COMMA varDef)* SEMICOLON
: ID constIndex* ASSIGN constInitVal
;
varDef
@ -157,11 +144,11 @@ constInitVal
initVal
: exp
| LBRACE (initValue (COMMA initValue)*)? RBRACE
| LBRACE (initVal (COMMA initVal)*)? RBRACE
;
funcDef
: funcType ID LPAREN funcFParams? RPAREN blockStmt
: funcType ID LPAREN funcFParams? RPAREN block
;
funcType
@ -175,7 +162,7 @@ funcFParams
;
funcFParam
: btype ID (LBRACK RBRACK (LBRACK exp RBRACK)*)?
: bType ID (LBRACK RBRACK (LBRACK exp RBRACK)*)?
;
block
@ -188,53 +175,107 @@ blockItem
;
stmt
: lValue ASSIGN exp SEMICOLON # assignStmt
| exp? SEMICOLON # exprStmt
| blockStmt # blockStmtStmt
| IF LPAREN cond RPAREN stmt (ELSE stmt)? # ifStmt
| WHILE LPAREN cond RPAREN stmt # whileStmt
| BREAK SEMICOLON # breakStmt
| CONTINUE SEMICOLON # continueStmt
| RETURN exp? SEMICOLON # returnStmt
: lVal ASSIGN exp SEMICOLON
| exp? SEMICOLON
| block
| IF LPAREN cond RPAREN stmt (ELSE stmt)?
| WHILE LPAREN cond RPAREN stmt
| BREAK SEMICOLON
| CONTINUE SEMICOLON
| RETURN exp? SEMICOLON
;
exp
: LPAREN exp RPAREN # parenExp
| lValue # lvalExp
| number # numberExp
| ID LPAREN funcRParams? RPAREN # callExp
| unaryOp exp # unaryExp
| exp (MUL | DIV | MOD) exp # mulExp
| exp (ADD | SUB) exp # addExp
| exp (LT | GT | LE | GE) exp # relExp
| exp (EQ | NEQ) exp # eqExp
| exp AND exp # lAndExp
| exp OR exp # lOrExp
: addExp
;
cond
: exp
: lOrExp
;
lValue
lVal
: ID (LBRACK exp RBRACK)*
;
primaryExp
: LPAREN exp RPAREN
| lVal
| number
;
number
: ILITERAL # intConst
| FLITERAL # floatConst
: intConst
| floatConst
;
intConst
: DEC_INT_LITERAL
| OCT_INT_LITERAL
| HEX_INT_LITERAL
;
unaryOp
floatConst
: DEC_FLOAT_LITERAL
| HEX_FLOAT_LITERAL
;
unaryExp
: primaryExp
| ID LPAREN funcRParams? RPAREN
| addUnaryOp unaryExp
;
addUnaryOp
: ADD
| SUB
| NOT
;
funcRParams
: exp (COMMA exp)*
;
mulExp
: unaryExp
| mulExp MUL unaryExp
| mulExp DIV unaryExp
| mulExp MOD unaryExp
;
addExp
: mulExp
| addExp ADD mulExp
| addExp SUB mulExp
;
relExp
: addExp
| relExp LT addExp
| relExp GT addExp
| relExp LE addExp
| relExp GE addExp
;
eqExp
: relExp
| eqExp EQ relExp
| eqExp NE relExp
;
lAndExp
: condUnaryExp
| lAndExp AND condUnaryExp
;
lOrExp
: lAndExp
| lOrExp OR lAndExp
;
condUnaryExp
: eqExp
| NOT condUnaryExp
;
constExp
: exp
: addExp
;

Loading…
Cancel
Save