flex / bison中的唯一令牌标识符

时间:2014-02-23 23:13:33

标签: bison flex-lexer

有没有办法为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);
}

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

enter image description here

而不是这个:

enter image description here

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

1 个答案:

答案 0 :(得分:0)

显而易见且最简单的方法是使用全局变量,并在每次需要新节点ID时递增它。无论你是在词法分析器中执行此操作还是解析器都或多或少都无关紧要;无论哪种方式都存在争议。但是,如果您在解析器中执行此操作,则可以使用局部变量,以防您对全局变量过敏(尽管在这种情况下,您还可以使用&#34;可重入&#34; flex扫描程序。)< / p>