实际上,我想在Antlr语法中使用静态Java类,例如从该类获取值并仅使用语法在控制台上进行打印。有办法吗?
例如

parse
 : block EOF
 ;

block
: System.out.println(javaClass.getValue())

最佳答案

嵌入式代码在ANTLR中称为“动作”:https://github.com/antlr/antlr4/blob/master/doc/lexicon.md#actions

换句话说,执行以下操作:

grammar T;

@header {
  // Code will be placed outside the parser class
  static class JavaClass {
    public String getValue() {
      return "TODO";
    }
  }
}

@members {
  // Code will be placed inside the parser class
  private final JavaClass javaClass = new JavaClass();
}

parse
 : block EOF
 ;

block
 : stat+ {System.out.println(javaClass.getValue());}
 ;

stat
 : ...
 ;

08-04 02:45