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_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()
中的哪个不 return null
.[= 来检查文字是浮点数还是整数24=]
我正在使用 ANTLR4 为我的语法构建解析器,如果可能的话,我想在另一个标记中获取标记类型。 例如:
NUMBER_LITERAL
: INT_LITERAL
| FLOAT_LITERAL;
当我想为这样的规则构建 AST 时,我可以使用 Token::getType
得到它是 NUMBER_LITERAL
,但是如果我想决定它是 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()
中的哪个不 return null
.[= 来检查文字是浮点数还是整数24=]