2017-05-07 7 views
0

私はantrl4 4.6を作成しようとしています。仕事はしていますが、私は4つのエラーがあり、それは進歩しており、私はそれらを乗り越えられません誰でも助けてくれますか?多分匿名クラスが必要です。Antlr4.6 BaseVisitorとVisitorのエラー:Visitor(Interface)は抽象です。インスタンス化できませんBaseVisitor(Class)&super()errore

また、super()エラーは正しい位置にありますが、動作することを拒否しています。

Yoco.java:34: error: YocoVisitor is abstract; cannot be instantiated 
     YocoVisitor eval = new YocoVisitor(dictInt, dictProcD); 
         ^YocoBaseVisitor.java:6: error: YocoBaseVisitor is not abstract and does not override abstract method visitR(RContext) in YocoVisitor public class YocoBaseVisitor extends AbstractParseTreeVisitor<Integer> implements YocoVisitor<Integer> { 
     ^YocoBaseVisitor.java:12: error: method does not override or implement a method from a supertype 
     @Override public Integer visitR(HashMap<String, Integer> _dictInt, HashMap<String, YocoParser.ProcDefContext> _dictProcD) { 
     ^YocoBaseVisitor.java:13: error: call to super must be first statement in constructor 
>     super(); 
        ^4 errors 

YocoBaseVisitor.java: 


// Generated from Yoco.g4 by ANTLR 4.6 
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; 
import org.antlr.v4.runtime.tree.ParseTreeVisitor; 
import java.util.HashMap; 
public class YocoBaseVisitor extends AbstractParseTreeVisitor<Integer> implements YocoVisitor<Integer> { 
    HashMap<String, Integer> dictInt = new HashMap<String, Integer>(); 
    HashMap<String, YocoParser.ProcDefContext> dictProcD = new HashMap<String, YocoParser.ProcDefContext>(); 
    @Override public Integer visitR(HashMap<String, Integer> _dictInt, HashMap<String, YocoParser.ProcDefContext> _dictProcD) { 
     super(); 
     dictInt = _dictInt; 
     dictProcD = _dictProcD; 
    } 
} 

YocoVisitor.java: 
{ 

import org.antlr.v4.runtime.tree.ParseTreeVisitor; 
public interface YocoVisitor<Integer> extends ParseTreeVisitor<Integer> { 
} 


Yoco.java: 

public class Yoco { 
    public static void main(String[] args) throws Exception { 
     String inputFile = null; 
     if(args.length > 0) 
     inputFile = args[0]; 
     InputStream is = System.in; 
     if (inputFile != null) 
     is = new FileInputStream(inputFile); 

     ANTLRInputStream input = new ANTLRInputStream(is); 
     YocoLexer lexer = new YocoLexer(input); 
     CommonTokenStream tokens = new CommonTokenStream(lexer); 
     YocoParser parser = new YocoParser(tokens); 

     ParseTree tree = parser.r(); 
     System.out.println(tree.toStringTree(parser)); 

    // Hash table for integer variables. 
    HashMap<String, Integer> dictInt = new HashMap<String, Integer>(); 

    // Hash table for procedure expressions with parameters. 
    HashMap<String, YocoParser.ProcDefContext> dictProcD = new HashMap<String, YocoParser.ProcDefContext>(); 

    YocoVisitor eval = new YocoVisitor(dictInt, dictProcD); 
    System.out.println(); 
    eval.visit(tree); 
    } 
} 
} 

答えて

1

エラー1 - > YocoVisitorはインターフェイスであり、インターフェイスはインスタンス化できません。 の代わりにYocoVisitor eval = new YocoVisitor(dictInt、dictProcD); YocoBaseVisitorで対応するコンストラクタを作成して作成する必要があります。 YocoVisitor eval = new YocoBaseVisitor(dictInt、dictProcD);

エラー2 - > super()は、クラスのコンストラクタで最初の行としてのみ呼び出すことができます。あなたはメソッドを呼び出しました。

エラー3 - >メソッドvisitRが正しい構文をオーバーライドしています。

すべての問題を解決することを望みます。

関連する問題