使用Bison访问一行中的两个或多个令牌

时间:2011-10-15 22:41:24

标签: parsing token bison yacc flex-lexer

我正在使用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队列。这是一个很好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

您可以在声明它时(在野牛文件中)指定令牌的类型,就像对非终结点(您使用%type的情况一样),如下所示:

%token <identifier> IDENTIFIER

(其中identifier%union中声明的字段之一)。然后$2$3等将指向正确的内容,而无需通过yylval(即在您的情况下它们将char *)。