Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 解析C++;使用ANTLR和获取编译器错误的代码段_Java_Parsing_Antlr - Fatal编程技术网

Java 解析C++;使用ANTLR和获取编译器错误的代码段

Java 解析C++;使用ANTLR和获取编译器错误的代码段,java,parsing,antlr,Java,Parsing,Antlr,我正在遵循一个教程,并试图使用ANTLR解析一些简单的代码片段,但我不能这样做,我得到了很多编译时错误,我无法解决,我张贴了一个截图,我在我的IDE中得到的错误 包cplusparser; 导入java.util.ArrayList; 导入java.util.List; 导入org.antlr.v4.runtime.CharStreams; 导入org.antlr.v4.runtime.CommonTokenStream; 导入org.antlr.v4.runtime.tree.ParseTr

我正在遵循一个教程,并试图使用ANTLR解析一些简单的代码片段,但我不能这样做,我得到了很多编译时错误,我无法解决,我张贴了一个截图,我在我的IDE中得到的错误

包cplusparser;
导入java.util.ArrayList;
导入java.util.List;
导入org.antlr.v4.runtime.CharStreams;
导入org.antlr.v4.runtime.CommonTokenStream;
导入org.antlr.v4.runtime.tree.ParseTreeWalker;
导入org.antlr.v4.runtime.tree.TerminalNode;
导入cpluplusparser.CPP14Parser.AbstractdeclaratorContext;
导入cpluplusparser.CPP14Parser.TranslationunitContext;
导入org.antlr.v4.*;
导入org.antlr.*;
导入org.antlr.runtime.tree.ParseTree;
公共类UppercaseMethodListener扩展了CPP14BaseListener{
私有列表错误=新建ArrayList();
//…错误的获取者
@凌驾
公共无效enterMethodDeclarator(AbstractdeclaratorContext ctx){
TerminalNode=ctx.Identifier();
String methodName=node.getText();
if(Character.isUpperCase(methodName.charAt(0))){
字符串错误=String.format(“方法%s大写!”,方法名);
错误。添加(错误);
}
}
//…错误的获取者
静态字符串javaClassContent=“public class SampleClass{void DoSomething(){}”;
静态CPP14Lexer java8Lexer=新的CPP14Lexer(CharStreams.fromString(javaClassContent));
静态CommonTokenStream令牌=新的CommonTokenStream(java8Lexer);
静态CPP14Parser=新的CPP14Parser(令牌);
静态TranslationunitContext树=parser.translationunit();
静态ParseTreeWalker=新ParseTreeWalker();
静态UppercaseMethodListener=新UppercaseMethodListener();
公共静态void main(字符串[]args){
走(听众,树);
断言(listener.getErrors().size(),为(1));
assertThat(listener.getErrors().get(0),
是(“方法DoSomething大写!”);
}
}

我建议签出(也包括错误)我在屏幕截图上看到的只是一堆扭曲的线条。请发布实际的错误消息。乍一看,您的注释承诺了一个从未定义过的getter方法,并且您的主方法中包含了类似于单元测试代码的代码,这似乎令人怀疑。
  package cplusplusparser;

  import java.util.ArrayList;
  import java.util.List;

  import org.antlr.v4.runtime.CharStreams;
  import org.antlr.v4.runtime.CommonTokenStream;
  import org.antlr.v4.runtime.tree.ParseTreeWalker;
  import org.antlr.v4.runtime.tree.TerminalNode;

  import cplusplusparser.CPP14Parser.AbstractdeclaratorContext;
  import cplusplusparser.CPP14Parser.TranslationunitContext;

  import org.antlr.v4.*;
  import org.antlr.*;
  import org.antlr.runtime.tree.ParseTree;



 public class UppercaseMethodListener extends CPP14BaseListener {

private List<String> errors = new ArrayList<>();

// ... getter for errors

 @Override
public void enterMethodDeclarator(AbstractdeclaratorContext ctx) {
    TerminalNode node = ctx.Identifier();
    String methodName = node.getText();

    if (Character.isUpperCase(methodName.charAt(0))) {
        String error = String.format("Method %s is uppercased!", methodName);
        errors.add(error);
    }
}
// ... getter for errors
static String javaClassContent = "public class SampleClass { void DoSomething(){} }";
static CPP14Lexer java8Lexer = new CPP14Lexer(CharStreams.fromString(javaClassContent));
static CommonTokenStream tokens = new CommonTokenStream(java8Lexer);
static CPP14Parser parser = new CPP14Parser(tokens);
static TranslationunitContext tree = parser.translationunit(); 

static ParseTreeWalker walker = new ParseTreeWalker();
static UppercaseMethodListener listener= new UppercaseMethodListener();

  public static void main (String []args ) {
   walker.walk(listener, tree);

    assertThat(listener.getErrors().size(), is(1));
    assertThat(listener.getErrors().get(0),
      is("Method DoSomething is uppercased!"));
   }
}