java - ANTLR4 : get subtoken's type

标签 java antlr

我正在使用 ANTLR4 为我的语法构建解析器,并且希望在可能的情况下获取其他 token 内的 token 类型。 例如:

NUMBER_LITERAL
    : INT_LITERAL
    | FLOAT_LITERAL;

当我想为这样的规则构建 AST 时,我可以使用 Token::getType 得到它是 NUMBER_LITERAL 但如果我想决定它是否是 INT_LITERAL FLOAT_LITERAL 我似乎找不到任何方法来做到这一点。

这可能吗?还是我必须为 NUMBER_LITERAL 创建解析器规则?

最佳答案

token 在 ANTLR 中没有子 token ,因此无法使用 token 执行您想要的操作。我还应该指出,如果 NUMBER_LITERAL , INT_LITERALFLOAT_LITERAL都是词法分析器规则(而不是 INT_LITERALFLOAT_LITERAL 是片段),然后是 NUMBER_LITERAL永远不能匹配或INT_LITERALFLOAT_LITERAL永远不可能匹配,具体取决于它们定义的顺序。

我要做的是 INT_LITERALFLOAT_LITERAL作为 token ,然后制作 NUMBER_LITERAL解析器规则。这样,您可以通过使用标记的替代方案或仅检查 INT_LITERAL() 中的哪个来检查文字是 float 还是整数。或FLOAT_LITERAL()不返回null .

关于java - ANTLR4 : get subtoken's type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55712511/

相关文章:

parsing - 使用ANTLR分析和修改源代码;我做错了吗?

c# - 使用 ANTLR4 解析并返回 double 列表

java - 以编程方式使用 ANTLR4 创建 Java 8 AST

java - 即使存在,Hibernate 也无法找到命名参数

java - 实例变量和构造函数?

java - jme3/Java 3d 路径实现?

parsing - 处理 Antlr 语法错误或如何针对意外标记提供更好的消息

java - 使用网格布局和获取组合框

java - 在java中搜索二维数组中的一系列值

java - antlr 4.2.2 输出到控制台警告 (157)