java - ANTLR4:获取子令牌的类型
问题描述
我正在使用 ANTLR4 为我的语法构建解析器,如果可能的话,我想在另一个令牌中获取令牌类型。例如:
NUMBER_LITERAL
: INT_LITERAL
| FLOAT_LITERAL;
当我想为这样的规则构建 AST 时,我可以得到它正在NUMBER_LITERAL
使用Token::getType
,但是如果我想决定它是否是,INT_LITERAL
或者FLOAT_LITERAL
我似乎找不到任何方法来这样做。
这是可能的还是我必须创建解析器规则NUMBER_LITERAL
?
解决方案
令牌在 ANTLR 中没有子令牌,所以没有办法用令牌做你想做的事。我还应该指出,如果NUMBER_LITERAL
,INT_LITERAL
和FLOAT_LITERAL
都是词法分析器规则(而不是INT_LITERAL
和FLOAT_LITERAL
是片段),那么要么NUMBER_LITERAL
永远不会匹配INT_LITERAL
,要么永远FLOAT_LITERAL
不会匹配,这取决于它们的定义顺序。
我要做的是拥有INT_LITERAL
和FLOAT_LITERAL
作为标记,然后制定NUMBER_LITERAL
解析器规则。这样,您可以通过使用标记的替代项或仅检查哪个INT_LITERAL()
或FLOAT_LITERAL()
不返回来检查文字是浮点数还是整数null
。
推荐阅读
- http-headers - 移动 UC 浏览器阻止 CDN 资产
- kendo-grid - 如何在 Angular 4 中使用 Kendo 进行服务器端分页
- python - django.db.utils.ProgrammingError: 关系 "account_program" 不存在 LINE 1: ...ated_date", "account_program"."updated_date" FROM "account_p
- jquery - 当我单击重新发送邀请按钮时,它应该显示一条消息
- wordpress - 删除 Wordpress 原生音频播放器皮肤
- java - jar 中找不到文件
- ruby-on-rails - 如何添加存储为字符串的小时和分钟
- php - Laravel - 会话中的数组不使用会话忘记方法销毁
- javascript - 将 this.props.params 传递给子组件
- php - 我的 sql 数据库没有从 android 应用程序更新