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