【发布时间】:2010-02-16 16:31:27
【问题描述】:
Bison 使用一种特殊的错误标记(称为“错误”),可以在 Bison 解析器中使用它来从错误中恢复。有没有办法从 Flex 生成的扫描仪返回这个特定的令牌?
【问题讨论】:
标签: bison flex-lexer
Bison 使用一种特殊的错误标记(称为“错误”),可以在 Bison 解析器中使用它来从错误中恢复。有没有办法从 Flex 生成的扫描仪返回这个特定的令牌?
【问题讨论】:
标签: bison flex-lexer
“错误”标记并不是真正的标记。它仅用于错误处理。
在http://dinosaur.compilertools.net/yacc/index.html 上,您可以阅读:令牌名称错误是为错误处理保留的,不应天真地使用。
在我自己的解析器中,我使用这样的错误标记(解析类似 C 的宏语言:
StatementList :
| StatementList Statement ';'
| error ';'
如果用户出错,yacc/bison 将继续执行,直到下一个分号(语句结束),然后继续执行下一个语句。
【讨论】: