&&,||,! added
parent
0cc677de1e
commit
dd5fd7e6a7
|
@ -27,6 +27,9 @@ void yyerror(const char *s) {
|
|||
"*" { return MULT; }
|
||||
"/" { return DIV; }
|
||||
"%" { return MOD; }
|
||||
"&&" { return AND; }
|
||||
"||" { return OR; }
|
||||
"!" { return NOT; }
|
||||
"return" { return RET; }
|
||||
"print" { return PRINT; }
|
||||
"while" { return WHILE; }
|
||||
|
|
|
@ -16,10 +16,13 @@ bool debug = false; // debug mode
|
|||
}
|
||||
|
||||
%token <str> IDENTIFIER NUMBER
|
||||
%token LBRACE RBRACE LPAREN RPAREN SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT WHILE IF ELSE
|
||||
%token LBRACE RBRACE LPAREN RPAREN SEMICOLON ASSIGN PLUS MINUS MULT DIV MOD RET PRINT WHILE IF ELSE AND OR NOT
|
||||
|
||||
%type <str> expr program statement block
|
||||
|
||||
%left OR
|
||||
%left AND
|
||||
%right NOT
|
||||
%left PLUS MINUS
|
||||
%left MULT DIV MOD
|
||||
%right UNARY
|
||||
|
@ -71,7 +74,10 @@ expr:
|
|||
| expr MULT { if (debug) printf("MULT\n") } expr // выражения вида expr*expr
|
||||
| expr DIV { if (debug) printf("DIV\n") } expr // выражения вида expr/expr
|
||||
| expr MOD { if (debug) printf("MOD\n") } expr // выражения вида expr%expr
|
||||
| LPAREN { if (debug) printf("LPAREN\n") } expr RPAREN { if (debug) printf("RPAREN\n") } // выражения вида (expr)
|
||||
| LPAREN { if (debug) printf("LPAREN\n") } expr RPAREN { if (debug) printf("RPAREN\n") } // выражения вида (expr)
|
||||
| expr OR expr
|
||||
| expr AND expr
|
||||
| NOT expr
|
||||
| IDENTIFIER { if (debug) printf("IDENTIFIER(%s)\n", $1); free($1); }
|
||||
| NUMBER { if (debug) printf("NUMBER(%s)\n", $1); free($1); }
|
||||
;
|
||||
|
|
Loading…
Reference in New Issue