【问题标题】:unique token identifier in flex/bisonflex/bison 中的唯一令牌标识符
【发布时间】:2014-02-23 23:13:32
【问题描述】:

有没有办法为 flex 读取的每个令牌创建一个唯一标识符?

例如:

弹性:

"+"     {yylval.string =yytext;return PLUS;}

[0-9]+ {
yylval.string =yytext;
return INT;}

野牛:

E: INT PLUS INT 
{
Node($1.ID);Node(PLUS.ID);Node($3.ID);Edge(PLUS.ID,$1.ID);Edge(PLUS.ID,$3.ID);
}

每次有输入时都会创建唯一节点。 这只是我想要完成的一个例子。当调用 Node(...) 和 Edge(...) 时,会打印到文件,该文件稍后会转换为图形。 我希望它们独一无二,因为我想创建它:

不是这个:

也欢迎其他类型的解决方案。

【问题讨论】:

    标签: bison flex-lexer


    【解决方案1】:

    执行此操作的最明显且最简单的方法是使用全局变量,并在每次需要新节点 ID 时递增它。无论您是在词法分析器还是解析器中执行此操作,都或多或少无关紧要;无论哪种方式都有争论。但是,如果您在解析器中执行此操作,则可以使用局部变量以防您对全局变量过敏(尽管在这种情况下,您也可以使用“可重入”弹性扫描器。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 2012-10-30
      相关资源
      最近更新 更多