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