我有两个具有功能lexxxlex()yylex()文件,并且我有一个yacc语法文件。我希望在语法规则上始终调用xxlex()。但是xxlex()只被调用一次,我希望它总是被调用。我该怎么做?

最佳答案

默认情况下,Yacc语法调用yylex()以获得新标记。

如果您想有时调用xxlex(),则可以安排在适当的时间从yylex()调用它。

如果您希望每次都调用xxlex(),则将其重命名为yylex()并将原始的xxlex()重命名为zzlex(),或者使用bison -p xx,以便所有内容(包括解析器功能)都以xx开头。而不是yy。 (相同的标志-p也可与POSIX兼容的yacc一起使用。flex程序使用-P xx来生成全部以xx而不是yy开头的符号; POSIX lex没有这样做的一种选择,但是我已经看到很多带有makefile脚本的sed,该脚本编辑lex生成的源,以将前缀从yy更改为其他字母,例如xx。)

10-02 13:01