Antlr4.6 BaseVisitor 和 Visitor 错误: Visitor (Interface) is abstract;无法实例化 BaseVisitor (Class) & super() 错误
Antlr4.6 BaseVisitor and Visitor errors : Visitor (Interface) is abstract; cannot be instantiated BaseVisitor (Class) & super() error
我正在尝试制作 antrl4 4.6。工作,但我收到 4 个高级错误,但我无法通过它们。谁能帮帮我吗?也许需要匿名 class.
还有 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 -> YocoVisitor 是接口,无法实例化接口。
代替
YocoVisitor eval = new YocoVisitor(dictInt, dictProcD);
必须在 YocoBaseVisitor 中编写和创建相应的构造函数
YocoVisitor eval = new YocoBaseVisitor (dictInt, dictProcD);
错误 2 ->
super () 只能在 class 的构造函数中作为第一行调用。您已调用方法。
错误 3 -> 方法 visitR 被正确覆盖检查语法。
希望能解决所有问题。
我正在尝试制作 antrl4 4.6。工作,但我收到 4 个高级错误,但我无法通过它们。谁能帮帮我吗?也许需要匿名 class.
还有 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 -> YocoVisitor 是接口,无法实例化接口。 代替 YocoVisitor eval = new YocoVisitor(dictInt, dictProcD); 必须在 YocoBaseVisitor 中编写和创建相应的构造函数 YocoVisitor eval = new YocoBaseVisitor (dictInt, dictProcD);
错误 2 -> super () 只能在 class 的构造函数中作为第一行调用。您已调用方法。
错误 3 -> 方法 visitR 被正确覆盖检查语法。
希望能解决所有问题。