c - lex 和 yacc — 组合两个词法分析器和一个 yacc

标签 c bison yacc lex flex-lexer

我有两个带有函数 xxlex()yylex()lex 文件,还有一个 yacc语法文件。我希望语法规则始终调用 xxlex()。但是 xlex() 只被调用一次,我希望它总是被调用。我该怎么做?

最佳答案

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

如果您想在某些时候调用 xxlex(),那么您可以安排在适当的时间从 yylex() 调用它。

如果您希望每次都调用 xxlex(),则可以将其重命名为 yylex() 并重命名原始的 xxlex()zzlex(),或使用 bison -p xx 以便所有内容(包括解析器函数)都以 xx 开头,而不是 yy 。 (相同的标志 -p 也适用于符合 POSIX 标准的 yaccflex 程序采用 -P xx 来生成所有符号从 xx 而不是 yy 开始;POSIX lex 没有这样做的选项,但我见过很多 makefile 使用 sed 脚本编辑由 lex 生成的源代码,将前缀从 yy 更改为其他一些字母,例如 >xx。)

关于c - lex 和 yacc — 组合两个词法分析器和一个 yacc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16630465/

相关文章:

c - 使用 ATTiny 和 Atmel Studio 处理 32 位数字

python - 解析器 YACC 中的 EOF 错误

yacc - Bison/Yacc,让文字标记返回它自己的值?

c++ - 使用 Flex/Bison 进行语法分析第 2 部分

c++ - 缺少分号的 Bison C++ 多重错误恢复

language-agnostic - 回补如何与标记一起使用?

c - parser.y :79. 33-41 : symbol character is used, 但未定义为 token 且没有规则

c - 如何删除任意 HWND 边框 (WinAPI)?

C popen() 改变字符串

c++ - Openssl DSA 标志