我正在使用 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_LITERAL
和FLOAT_LITERAL
都是词法分析器规则(而不是 INT_LITERAL
和 FLOAT_LITERAL
是片段),然后是 NUMBER_LITERAL
永远不能匹配或INT_LITERAL
和FLOAT_LITERAL
永远不可能匹配,具体取决于它们定义的顺序。
我要做的是 INT_LITERAL
和FLOAT_LITERAL
作为 token ,然后制作 NUMBER_LITERAL
解析器规则。这样,您可以通过使用标记的替代方案或仅检查 INT_LITERAL()
中的哪个来检查文字是 float 还是整数。或FLOAT_LITERAL()
不返回null
.
关于java - ANTLR4 : get subtoken's type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55712511/