solved shift-reduce errors
This commit is contained in:
26
grammar.y
26
grammar.y
@ -18,6 +18,22 @@
|
|||||||
int integ;
|
int integ;
|
||||||
char * words;
|
char * words;
|
||||||
}
|
}
|
||||||
|
//precedence order
|
||||||
|
%precedence RESERVE
|
||||||
|
%precedence RELEASE
|
||||||
|
%precedence DOT
|
||||||
|
%precedence SUB_OR_NEG
|
||||||
|
%precedence NOT
|
||||||
|
%left MUL
|
||||||
|
%left DIV
|
||||||
|
%left REM
|
||||||
|
%left ADD
|
||||||
|
//need subtraction only here
|
||||||
|
%left LESS_THAN
|
||||||
|
%left EQUAL_TO
|
||||||
|
%left AND
|
||||||
|
%left OR
|
||||||
|
%left ASSIGN
|
||||||
|
|
||||||
%token <words> ID 101
|
%token <words> ID 101
|
||||||
%token T_INTEGER
|
%token T_INTEGER
|
||||||
@ -50,7 +66,7 @@
|
|||||||
%token COLON 508
|
%token COLON 508
|
||||||
%token COMMA 509
|
%token COMMA 509
|
||||||
%token ARROW 510
|
%token ARROW 510
|
||||||
%token ADD 601
|
/* %token ADD 601
|
||||||
%token SUB_OR_NEG 602
|
%token SUB_OR_NEG 602
|
||||||
%token MUL 603
|
%token MUL 603
|
||||||
%token DIV 604
|
%token DIV 604
|
||||||
@ -63,8 +79,10 @@
|
|||||||
%token OR 611
|
%token OR 611
|
||||||
%token DOT 612
|
%token DOT 612
|
||||||
%token RESERVE 613
|
%token RESERVE 613
|
||||||
%token RELEASE 614
|
%token RELEASE 614 */
|
||||||
%token COMMENT 700
|
%token COMMENT 700
|
||||||
|
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
|
||||||
program:
|
program:
|
||||||
@ -140,7 +158,7 @@ expression:
|
|||||||
constant
|
constant
|
||||||
| UnaryOperator expression
|
| UnaryOperator expression
|
||||||
| assignable
|
| assignable
|
||||||
| expression binaryOperator expression
|
| constant binaryOperator expression
|
||||||
| L_PAREN expression R_PAREN
|
| L_PAREN expression R_PAREN
|
||||||
| memOp assignable
|
| memOp assignable
|
||||||
;
|
;
|
||||||
@ -197,7 +215,7 @@ int main() {
|
|||||||
int a;
|
int a;
|
||||||
while ((a = yyparse()) != EOF){
|
while ((a = yyparse()) != EOF){
|
||||||
printf("%d = a: yytext = %s: yychar = %d\n", a, yytext, yychar);
|
printf("%d = a: yytext = %s: yychar = %d\n", a, yytext, yychar);
|
||||||
if(yytext[0] == '?'){
|
if(yytext[0] == '!'){
|
||||||
print_symbol_table(getAncestor(st),stdout);
|
print_symbol_table(getAncestor(st),stdout);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user