java - 我如何确定在 ANTLR 中选择了哪个替代节点

标签 java antlr4

假设我有以下内容:

variableDeclaration: Identifier COLON Type SEMICOLON;
Type: T_INTEGER | T_CHAR | T_STRING | T_DOUBLE | T_BOOLEAN;

那些 T_ 名称只是定义为“整数”、“字符”等。

现在假设我在名为 LittleLanguage 的测试程序的 exitVariableDeclaration 方法中。我可以引用 LittleLanguageLexer.T_INTEGER(等),但我看不到如何确定通过上下文找到了哪些类型。

我原以为它会是 context.Type().getSymbol().getType() 但它没有返回正确的值。我知道我可以使用 context.Type().getText() 但我真的不想进行字符串比较。

我错过了什么?

谢谢

最佳答案

您通过过早地组合标记而丢失了词法分析器中的信息。最好结合在解析器规则中:

variableDeclaration: Identifier COLON type SEMICOLON;
type: T_INTEGER | T_CHAR | T_STRING | T_DOUBLE | T_BOOLEAN;

现在,type 是一个 TerminalNode,其底层 token 实例具有唯一类型:

variableDeclarationContext ctx = .... ;
TerminalNode typeNode = (TerminalNode) ctx.type().getChild(0);

switch(typeNode.getSymbol().getType()) {
  case YourLexer.T_INTEGER:
     ...

关于java - 我如何确定在 ANTLR 中选择了哪个替代节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33198762/

相关文章:

java - antlr4 - 任何文本和关键字

java - Antlr - 解析 C.g4 的多行 #define

java - 如何在方法中使用 try{}-block-variable?

在 java 中使用 Apache poi 3.8 在 Excel 文件上写入图像时出现 java.util.NoSuchElementException

java - Antlr 可以将嵌入式语法路由到单独的文件进行处理吗?

antlr4 - 使用转义字符解析带引号的字符串

parsing - ANTLR:自定义语法示例的词法错误帮助

java - ImapIdleChannelAdapter javax.mail.AuthenticationFailedException : [ALERT] Too many simultaneous connections

java - 预览xml布局文件,无需构建项目android studio

java - Math.random() 使用安全吗?