gpt4 book ai didi

macros - 在 yacc/bison lex 中处理#define 宏

转载 作者:行者123 更新时间:2023-12-05 05:29:13 26 4
gpt4 key购买 nike

如何使用 yacc/bison 实现 #define 宏?

我在想所有的定义字符都必须匹配一个常规变量。变量被定义为 [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) 让 lex 忘记宏字符 4) 插入新的正确字符。

最佳答案

在 lex 中放置一个规则来查找定义。然后使用 unput 插入替换文本。注意文字要向后插入

[a-zA-Z0-9_]* {
if(strcmp(yytext, "HARDCODED_DEFINE")==0) {
const char s[]="int replacement_text";
int z;
for(z=strlen(s)-1; z>=0; z--)
unput(s[z]);
}
else
return VAR_TOK;
}

关于macros - 在 yacc/bison lex 中处理#define 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1615000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com