Syntax error 处理一个令牌后Bison中出现语法错误

Syntax error 处理一个令牌后Bison中出现语法错误,syntax-error,bison,token,Syntax Error,Bison,Token,我正在努力赶上Flex和Bison的速度。我可以用一种非常简单的“语言”解析一个令牌,但第二个令牌失败,即使该令牌是合法的 测试1: %{ #include <stdio.h> #include "test.hpp" %} %% [0-9]+ {printf("Number entered\n"); return INTEGER_NUMBER;} [a-zA-Z]+ {printf("plain text entered: '%s'\n",yytext); return PLAIN

我正在努力赶上Flex和Bison的速度。我可以用一种非常简单的“语言”解析一个令牌,但第二个令牌失败,即使该令牌是合法的

测试1:

%{
#include <stdio.h>
#include "test.hpp"
%}

%%
[0-9]+ {printf("Number entered\n"); return INTEGER_NUMBER;}
[a-zA-Z]+ {printf("plain text entered: '%s'\n",yytext); return PLAIN_TEXT;}
[ \t]   ;
.       ;
%%

为什么会出现这种语法错误?

您的
test.y
似乎缺少语法,无法处理多个
test
的情况 继续。 那么,添加如下语法怎么样

%%
tests : test | tests test; /* added */

test : text | number;

...

哦,伊瑟,真漂亮。当你看到它的时候,这是很明显的,但我不认为我会独自去那里。我确实需要做一个小的mod来编译它。我必须将“tests”行的右侧放在它自己的行上,行的开头有一个“|”。(我试图通过在每行前面加上4个空格来添加代码,但这不会保留换行符。)
$ ./test
cat
plain text entered: 'cat'

dog
plain text entered: 'dog'
1: error: 'syntax error' at 'dog', yylval=0

$ ./test
34
Number entered

34
Number entered
1: error: 'syntax error' at '34', yylval=0
%%
tests : test | tests test; /* added */

test : text | number;

...