flex/bison中的唯一令牌标识符
有没有办法为flex读取的每个令牌创建uniquie标识符 例: flex:flex/bison中的唯一令牌标识符,bison,flex-lexer,Bison,Flex Lexer,有没有办法为flex读取的每个令牌创建uniquie标识符 例: 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); } 野牛: "+" {yylva
"+" {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);
}
野牛:
"+" {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(…)时,将打印到文件中,该文件稍后将转换为图形。
我希望它们是独一无二的,因为我想创建以下内容:
而不是这个:
其他类型的解决方案也受欢迎 显而易见且最简单的方法是使用一个全局变量,并在每次需要一个新的节点ID时递增它。无论是在lexer中还是在解析器中这样做,都或多或少是不相关的;这两种方式都有争议。如果您在解析器中这样做,那么您可以使用局部变量,以防您对全局变量过敏(尽管在这种情况下,您也可以使用“可重入”flex扫描仪)