首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在错误中获取当前令牌?

如何在错误中获取当前令牌?
EN

Stack Overflow用户
提问于 2012-11-06 20:00:27
回答 2查看 4.9K关注 0票数 1

我的问题是传递给yyerror的消息已经格式化了(也就是说,它实际上是一种英文解释错误的原因),而我想要得到的只是当前的令牌(即错误伪令牌之前的标记)。

那怎么拿到呢?

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

我很抱歉没有100%的精确性--我需要的是标记(符号),而不是正文(文本),它是匹配的(通过标记)。

假设我有一个规则[A-Za-z0-9_]+构成一个ID。所以我想得到令牌ID,而不是foobar

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-06 22:23:25

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

如果你说出为什么你想要当前的标记--它通常不是有用的信息,这可能会很有帮助。您提到了错误伪令牌,这是没有意义的,因为这与错误恢复相关,而不是错误本身--当它正常进入图片时,输入中的一堆令牌已经被丢弃了。

票数 1
EN

Stack Overflow用户

发布于 2012-11-06 20:12:25

这是在我的一个旧项目中发现的,其中有一个重新定义的yyerror:

代码语言:javascript
复制
int yyerror (char *msg) {
  printf("oha, %s: '%s' in line %d\n", msg, yytext, yylineno);
  return 0;
}

这是一个使用flex/bison的c++项目,我认为你可以在yytext中找到有趣的东西。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13258460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档