我该如何在yacc/bison中实现#define宏?
我考虑将所有定义的字符与正常变量匹配。变量被定义为[a-zA-Z_][a-zA-Z0-9_]*,因此我认为可以在那里放置一个检查,以查看变量是否为已定义的工作。然后用应该替换的文本替换它。
我该怎么做?现在,我想完全忽略单词BAD,就好像我在C中将其定义为#define BAD。下面是该lex规则的代码,但我做错了。同时,lex会抱怨流中有“BA”。我知道以下内容完全错误和不合逻辑,那么我该如何忽略BAD,然后如何将其替换为float之类的东西。
我考虑将所有定义的字符与正常变量匹配。变量被定义为[a-zA-Z_][a-zA-Z0-9_]*,因此我认为可以在那里放置一个检查,以查看变量是否为已定义的工作。然后用应该替换的文本替换它。
我该怎么做?现在,我想完全忽略单词BAD,就好像我在C中将其定义为#define BAD。下面是该lex规则的代码,但我做错了。同时,lex会抱怨流中有“BA”。我知道以下内容完全错误和不合逻辑,那么我该如何忽略BAD,然后如何将其替换为float之类的东西。
if(strcmp(yytext, "BAD")==0) {
int i, l = strlen(yytext);
for(i=0; i<l; i++) { REJECT }
return;
}
return VAR; }
我知道主要步骤是1)定义宏,2)在源代码中检测它,3)让词法分析器忘记宏字符,4)插入新的正确字符。