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



我使用bison来实现一个简单的解析器。其中一行语法看起来像:

prefix_definition : PREFIX IDENTIFIER IDENTIFIER ABBR IDENTIFIER ';'

我不确定如何分别访问第一,第二和第三IDENTIFIER。我的flex文件像这样读取IDENTIFIER:

IDENTIFIER_REGEX (_|[A_Za-z])(_|[0-9A-Za-z])*
{IDENTIFIER_REGEX}     { yylval.identifier=strdup(yytext); return IDENTIFIER; }

我不能简单地使用yylval.identifier。我尝试了$2.identifier左右,但它根本不起作用(无论如何都不应该起作用)。有办法解决这个问题吗?

如果野牛/flex不支持这种访问,我正在考虑使用FIFO队列。这是一个好的解决方案吗?

您可以在声明令牌时(在bison文件中)指定它的类型,与声明非终结符(使用%type)的方式相同,如下所示:

%token <identifier> IDENTIFIER

(其中identifier%union中声明的字段之一)。然后$2, $3等将指向正确的东西,而不需要经过yylval(即它们将是char * s)。

最新更新