ANTLR4:获取子令牌的类型

ANTLR4: get subtoken's type

我正在使用 ANTLR4 为我的语法构建解析器,如果可能的话,我想在另一个标记中获取标记类型。 例如:

NUMBER_LITERAL
    : INT_LITERAL
    | FLOAT_LITERAL;

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

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

令牌在 ANTLR 中没有子令牌,因此无法用令牌做您想做的事。我还应该指出,如果 NUMBER_LITERALINT_LITERALFLOAT_LITERAL 都是词法分析器规则(而不是 INT_LITERALFLOAT_LITERAL 是片段),那么 NUMBER_LITERAL 永远无法匹配,或者 INT_LITERALFLOAT_LITERAL 永远无法匹配,具体取决于它们的定义顺序。

我要做的是将 INT_LITERALFLOAT_LITERAL 作为标记,然后使 NUMBER_LITERAL 成为解析器规则。这样,您可以通过使用标记的替代项或仅检查 INT_LITERAL()FLOAT_LITERAL() 中的哪个不 return null.[= 来检查文字是浮点数还是整数24=]