如何将Flex生成的yy前缀函数及变量修改为自定义前缀?
修改Flex生成代码的默认前缀(将yy改为aa)
要把Flex生成的默认yy开头的变量、函数改成aa前缀(比如yytext变aatext),只需要在Flex源文件的最开头添加一条指令即可:
- 在Flex代码的最顶部(
%%规则块之前)添加:%prefix "aa"
这条指令会告诉Flex把所有自动生成的标识符前缀从yy替换成aa,包括但不限于:
yytext→aatextyylex→aalexyyin→aainyyout→aaoutyywrap→aawrap
示例对比
原Flex代码(yy前缀)
%% [a-zA-Z]+ { printf("识别到单词: %s\n", yytext); } .|\n { /* 忽略无关字符 */ } %% int main() { yylex(); return 0; } int yywrap() { return 1; }
修改后的Flex代码(aa前缀)
%prefix "aa" %% [a-zA-Z]+ { printf("识别到单词: %s\n", aatext); } .|\n { /* 忽略无关字符 */ } %% int main() { aalex(); return 0; } int aawrap() { return 1; }
注意事项
- 自定义实现的相关函数(比如
yywrap)也要同步改成对应前缀(aawrap),否则编译时会出现未定义引用的错误。 %prefix指令必须放在Flex源文件的最开头,不能放在规则块或者其他代码块之后。
内容的提问来源于stack exchange,提问作者Four dimension
相关产品推荐
相关产品推荐

