我正在使用bison来实现一个简单的解析器。一行语法如下:
prefix_definition : PREFIX IDENTIFIER IDENTIFIER ABBR IDENTIFIER ';'
我不确定如何分别访问第1个,第2个和第3个IDENTIFIER
。我的flex文件像这样读取IDENTIFIER
:
IDENTIFIER_REGEX (_|[A_Za-z])(_|[0-9A-Za-z])*
{IDENTIFIER_REGEX} { yylval.identifier=strdup(yytext); return IDENTIFIER; }
我不能简单地使用yylval.identifier
。我试过$2.identifier
左右,但它根本不起作用(并且它不应该是工作的)。有没有办法解决这个问题?
如果bison / flex不支持此类访问,我正在考虑使用FIFO队列。这是一个很好的解决方案吗?
答案 0 :(得分:2)
您可以在声明它时(在野牛文件中)指定令牌的类型,就像对非终结点(您使用%type
的情况一样),如下所示:
%token <identifier> IDENTIFIER
(其中identifier
是%union
中声明的字段之一)。然后$2
,$3
等将指向正确的内容,而无需通过yylval
(即在您的情况下它们将char *
)。