我的问题是传递给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/