0
我正在嘗試使用flex和bison爲編程語言構建一個簡單的解析器。
當我從終端(標準輸入)檢測它,它總是說,(該yyerror()
定製):
Error: syntax error, unexpected SOME_TOKEN, expecting $end, on line: 2
在第二輸入
。換句話說,它只適用於第一次輸入。
我只能猜測內部解析堆棧的野牛在第一個語句後沒有刷新。
這裏是我的野牛代碼:
%{
#include <stdio.h>
#include <stdlib.h>
#define YYDEBUG 1
%}
%token TOKEN_DECLARE TOKEN_SET TOKEN_STR TOKEN_SYMBOL EOL
%error-verbose
%%
statement: statement
| declare_var EOL { puts("Reach declare EOL branch"); }
| set_value EOL { puts("Reach set_value EOL branch"); }
;
declare_var: TOKEN_DECLARE TOKEN_SYMBOL { printf("Declare var\n"); }
| TOKEN_DECLARE set_value
;
set_value : TOKEN_SYMBOL TOKEN_SET { printf("Set var"); }
| set_value TOKEN_STR { printf(" to string\n"); }
| set_value TOKEN_SYMBOL { printf(" to symbol\n"); }
;
%%
這裏是我的Flex代碼
%%
[\t\n ] {/*Ignore*/}
var {
return (TOKEN_DECLARE);
}
";" {
//puts("Got EOL");
return (EOL);
}
\"[a-zA-Z]+\" {
return (TOKEN_STR);
}
\'[a-zA-Z]+\' {
return (TOKEN_STR);
}
[a-zA-Z]+ {
return (TOKEN_SYMBOL);
}
"=" {
return (TOKEN_SET);
}
%%
感謝
謝謝,它的工作原理! – shockwave