【问题标题】:Access two or more tokens in one line using Bison使用 Bison 在一行中访问两个或多个令牌
【发布时间】:2011-12-08 12:44:07
【问题描述】:

我正在使用 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 左右,但它根本不起作用(而且它也不应该起作用)。有没有办法解决这个问题?

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

【问题讨论】:

  • 我删除了“Adobe Flex”标签并添加了“gnu-flex”标签;因为我认为这篇文章涉及词法分析器;不是 Flash 平台 SDK。

标签: parsing token bison yacc flex-lexer


【解决方案1】:

您可以在声明令牌时(在野牛文件中)指定令牌的类型,就像对非终结符(在其中使用 %type)一样:

%token <identifier> IDENTIFIER

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

【讨论】:

  • 它有效。事实上,我只是将 $2 $3 等与 yylval 混淆了,并认为它们是内容。
猜你喜欢
  • 1970-01-01
  • 2019-09-29
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 2019-10-13
  • 1970-01-01
  • 2014-10-29
  • 1970-01-01
相关资源
最近更新 更多