我将如何#define
使用 yacc/bison 实现宏?
我在想所有定义的字符都必须匹配一个常规变量。变量被定义为[a-zA-Z_][a-zA-Z0-9_]*
所以我想我可以在那里检查变量是否已定义有效。然后将文本替换为应有的内容。
我怎样才能做到这一点?现在我想完全忽略 BAD 这个词,就好像我#define BAD
在 C 中定义它一样。下面是该 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)让 lex 忘记宏字符 4)插入新的正确字符。