我正在尝试使用 flex 和 bison 制作一个小型编译器,但我不知道如何为每条规则执行操作
我的语法是这样的:
%union{
std::string *s;
};
%start program
%type <s> expr
%token <s> KEYWORD
%token <s> VARIABLE
%%
program : KEYWORD {std::cout << "A"; }
| KEYWORD VARIABLE {std::cout << "B"; }
变量正则表达式是 [a-zA-Z0-9]
“caps”是我的关键词
如果我将输入作为“大写锁定”(caps =KEYWORD 和 lock =VARIABLE),我得到的输出是“B”
如果我将输入作为大写字母,那么它会等到我输入下一个单词,并且在输入任何下一个单词后,如果下一个输入是大写字母,它会打印“Asyntax error”。
问题是它会等到下一个输入给出打印 A 并且如果存在语法错误的错误,它仍然会打印 A
我没有得到它有什么问题,有人可以找到它的错误。