在flex中引用定义名称

时间:2016-02-02 17:18:19

标签: regex tokenize flex-lexer

在flex中是否有一种方法可以在匹配模式的动作部分中引用定义名称,类似于引用模式本身的方式?我想要类似于

的东西
%{
#include<stdio.h> 
}%

DIGIT [0-9]

%%

{DIGIT} printf("%s is a %s", yytext, yydefinition)

%%

int main(){

yylex(); return 0; 
}

我可以想象,当您在{DIGIT} | {STRING}等规则中有多个定义时,问题可能就出现了。

1 个答案:

答案 0 :(得分:1)

否:lex(和flex)将命名模式的内容编译成表,而没有提供在词法分析器中引用其名称的方法。

(又名开始条件)没有太多帮助。 lex / flex只为这些名称生成#define语句。

flex有一个 debug 开关,但生成的表仍然不包含您想要的信息。

另一方面,

yaccbison具有可用于帮助处理错误消息的表。 cproto程序使用该功能,针对yaccbison的多种变体进行调整。