error-handling - 如何在yyerror中获取当前 token ?

标签 error-handling syntax-error token yacc lex

我的问题是传递给yyerror的消息已经被格式化(即实际上是英文解释哪里出了问题),而我想得到的只是当前 token (即错误伪 token 之前的 token )。

那么如何获得呢?

我使用gplex/gppg,它们是C#中的lex/yacc实现。

抱歉,我不是100%精确的人-我需要的是 token (符号)而不是(通过 token )匹配的正文(文本)。

假设我有一条规则[A-Za-z0-9_]+构成ID。所以我想获得 token ID而不是foobar

最佳答案

没有标准,但是野牛和大多数版本的yacc将当前 token 存储在yychar中。不幸的是,这通常是一个局部变量(yyparse),因此您只能在解析器操作中才能在其他函数(例如yyerror)中访问它。

如果您说为什么要当前 token ,这可能会有所帮助-通常它不是有用的信息。您提到了错误伪 token ,该错误伪 token 与错误恢复相关联,没有任何意义,而不是这样的错误-进入图片时,通常会丢弃来自输入的一堆 token 。

关于error-handling - 如何在yyerror中获取当前 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13258460/

相关文章:

python - 为什么 Django 在升级到 v2.2 后发送重复的错误消息?

php - Laravel CSRF 保护

c++ - 使用字符串分隔符(标准 C++)在 C++ 中解析(拆分)字符串

bash - 如何从 "permission denied"中排除所有 "find"消息?

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

php - 即使session_start()已经在最前面,“session_start(): Cannot send session cache limiter - headers already sent”仍会继续出现

python-3.x - python 'while'代码的语法错误

javascript 我无法捕获语法错误

Haskell 关系错误 - 声明中的语法错误(意外的 `;' ,可能是由于布局错误)

unicode - ANTLR4:在 token 规则中使用非 ASCII 字符