在flex中是否有一种方法可以在匹配模式的动作部分中引用定义名称,类似于引用模式本身的方式?我想要类似于
的东西%{
#include<stdio.h>
}%
DIGIT [0-9]
%%
{DIGIT} printf("%s is a %s", yytext, yydefinition)
%%
int main(){
yylex(); return 0;
}
我可以想象,当您在{DIGIT} | {STRING}
等规则中有多个定义时,问题可能就出现了。
答案 0 :(得分:1)
否:lex
(和flex
)将命名模式的内容编译成表,而没有提供在词法分析器中引用其名称的方法。
州(又名开始条件)没有太多帮助。 lex / flex只为这些名称生成#define
语句。
flex
有一个 debug 开关,但生成的表仍然不包含您想要的信息。
yacc
和bison
具有可用于帮助处理错误消息的表。 cproto
程序使用该功能,针对yacc
和bison
的多种变体进行调整。