我有两个带有函数 xxlex()
和 yylex()
的 lex
文件,还有一个 yacc
语法文件。我希望语法规则始终调用 xxlex()
。但是 xlex() 只被调用一次,我希望它总是被调用。我该怎么做?
最佳答案
默认情况下,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
。)
关于c - lex 和 yacc — 组合两个词法分析器和一个 yacc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16630465/