這是我的野牛代碼:Bison分析器計算器
%}
%union {
int int_val;
}
%left '+' '-'
%nonassoc '(' ')'
%token INTEGER PRINT
%type <int_val> expr_int INTEGER
%%
program: command '\n' { return 0; }
;
command: print_expr
;
print_expr: PRINT expr_int { cout<<$2<<endl; }
expr_int: expr_int '+' expr_int { $$ = $1 + $3; }
| expr_int '-' expr_int { $$ = $1 - $3; }
| '(' expr_int ')' { $$ = $2; }
| INTEGER
;
,這是Flex代碼:
%}
INTEGER [1-9][0-9]*|0
BINARY [-+]
WS [ \t]+
BRACKET [\(\)]
%%
print{WS} { return PRINT; }
{INTEGER} { yylval.int_val=atoi(yytext); return INTEGER; }
{BINARY}|\n { return *yytext; }
{BRACKET} { return *yytext; }
{WS} {}
. { return *yytext; }
%%
//////////////////////////////////////////////////
int yywrap(void) { return 1; } // Callback at end of file
該計劃無效的輸入是:
print 5
輸出:
5
輸入:
print (1+1)
輸出:
2
但由於某些原因,有以下輸入我沒有得到立即的錯誤:
print (1+1))
輸出:
2
some error
輸入:
print 5!
輸出:
5
some error
我想錯誤立即被打印,而不commiting打印命令,然後發出一個錯誤。
我應該如何改變程序,所以它不會打印errornous投入?
編譯器懲罰你調用括號「括號」。 –