问题描述
我已经搜索并查看了该社区的其他主题。要弄清楚“注:main.java使用或覆盖已弃用的API”的含义。我发现或读到这不是错误而是警告?这意味着所使用的代码将来可能不再可用?
好的,我可以从输出中看到我实际上正在犯错误,但似乎无法弄清楚。
main.java:47: error: Interpreter is not abstract and does not override abstract method
visitConstant(ConstantContext) in implVisitor
class Interpreter extends AbstractParseTreeVisitor<Double> implements implVisitor<Double> {
这是什么意思:“解释器不是抽象的,不会覆盖抽象方法”。
错误:
java -jar /usr/local/lib/antlr-4.8-complete.jar -visitor impl.g4
javac main.java Environment.java implParser.java implBaseVisitor.java implVisitor.java
implLexer.java
main.java:47: error: Interpreter is not abstract and does not override abstract method
visitConstant(ConstantContext) in implVisitor
class Interpreter extends AbstractParseTreeVisitor<Double> implements implVisitor<Double> {
^
Note: main.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
**1 error**
make: *** [Makefile:12: main.class] Error 1
这是main.java:
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
import org.antlr.v4.runtime.CharStreams;
import java.io.IOException;
public class main {
public static void main(String[] args) throws IOException{
// we expect exactly one argument: the name of the input file
if (args.length!=1) {
System.err.println("\n");
System.err.println("Simple calculator\n");
System.err.println("=================\n\n");
System.err.println("Please give as input argument a filename\n");
System.exit(-1);
}
String filename=args[0];
// open the input file
CharStream input = CharStreams.fromFileName(filename);
//new ANTLRFileStream (filename); // depricated
// create a lexer/scanner
implLexer lex = new implLexer(input);
// get the stream of tokens from the scanner
CommonTokenStream tokens = new CommonTokenStream(lex);
// create a parser
implParser parser = new implParser(tokens);
// and parse anything from the grammar for "start"
ParseTree parseTree = parser.start();
// Construct an interpreter and run it on the parse tree
Interpreter interpreter = new Interpreter();
interpreter.visit(parseTree);
}
}
// We write an interpreter that implements interface
// "implVisitor<T>" that is automatically generated by ANTLR
// This is parameterized over a return type "<T>" which is in our case
// simply a Double.
class Interpreter extends AbstractParseTreeVisitor<Double> implements implVisitor<Double> {
static Environment env=new Environment();
public Double visitStart(implParser.StartContext ctx){
for(implParser.CommandContext c:ctx.cs) visit(c);
return null;
};
public Double visitSingleCommand(implParser.SingleCommandContext ctx){
return visit(ctx.c);
}
public Double visitMultipleCommands(implParser.MultipleCommandsContext ctx){
for(implParser.CommandContext c:ctx.cs) visit(c);
return null;
}
public Double visitAssignment(implParser.AssignmentContext ctx){
Double v=visit(ctx.e);
env.setvariable(ctx.x.getText(),v);
return null;
}
public Double visitOutput(implParser.OutputContext ctx){
Double v=visit(ctx.e);
System.out.println(v);
return null;
}
public Double visitWhileLoop(implParser.WhileLoopContext ctx){
while(visit(ctx.c).equals(1.0)){
visit(ctx.p);
}
return null;
}
public Double visitIfStatement(implParser.IfStatementContext ctx){
while(visit(ctx.c1).equals(1.0)){
visit(ctx.p1);
}
return null;
}
/*public Double visitSubstraction(implParser.SubstractionContext ctx) {
return visit(ctx.e1);
}
public Double visitDivison(implParser.DivisonContext ctx) {
return visit(ctx.e1);
}*/
public Double visitMUL(implParser.MULContext ctx) {
Double left = this.visit(ctx.expr(0));
Double right = this.visit(ctx.expr(1));
switch (ctx.op.getType()) {
case implParser.MULT:
return left * right;
case implParser.DIV:
return left / right;
case implParser.MOD:
return left % right;
default:
throw new RuntimeException("unkNown operator: " + implParser.tokenNames[ctx.op.getType()]);
}
}
public Double visitOP(implParser.OPContext ctx) {
Double left = this.visit(ctx.expr(0));
Double right = this.visit(ctx.expr(1));
switch (ctx.op.getType()) {
case implParser.PLUS:
//return left && right;
return left + right;
case implParser.MINUS:
return left - right;
default:
throw new RuntimeException("unkNown operator: " + implParser.tokenNames[ctx.op.getType()]);
}
}
public Double visitParenthesis(implParser.ParenthesisContext ctx){
return visit(ctx.e);
};
public Double visitvariable(implParser.VariableContext ctx){
return env.getvariable(ctx.x.getText());
};
/*public Double visitAddition(implParser.AdditionContext ctx){
return visit(ctx.e1)+visit(ctx.e2);
};
public Double visitMultiplication(implParser.MultiplicationContext ctx){
return visit(ctx.e1)*visit(ctx.e2);
};
*/
public Double visitConstant(implParser.ConstantContext ctx){
return Double.parseDouble(ctx.c.getText());
};
public Double visitUnequal(implParser.UnequalContext ctx){
Double v1=visit(ctx.e1);
Double v2=visit(ctx.e2);
if (v1.equals(v2)) return 0.0;
else return 1.0;
}
public Double visitEqual(implParser.EqualContext ctx){
Double v1=visit(ctx.e1);
Double v2=visit(ctx.e2);
if (v1.equals(v2)) return 0.0;
else return 1.0;
}
public Double visitLess(implParser.LessContext ctx){
Double v1=visit(ctx.e1);
Double v2=visit(ctx.e2);
if (v1.equals(v2)) return 0.0;
else return 1.0;
}
public Double visitLessOrEqual(implParser.LessOrEqualContext ctx){
Double v1=visit(ctx.e1);
Double v2=visit(ctx.e2);
if (v1.equals(v2)) return 0.0;
else return 1.0;
}
public Double visitGreater(implParser.GreaterContext ctx){
Double v1=visit(ctx.e1);
Double v2=visit(ctx.e2);
if (v1.equals(v2)) return 0.0;
else return 1.0;
}
public Double visitGreaterOrEqual(implParser.GreaterOrEqualContext ctx){
Double v1=visit(ctx.e1);
Double v2=visit(ctx.e2);
if (v1.equals(v2)) return 0.0;
else return 1.0;
}
public Double visitAND(implParser.ANDContext ctx){
Double v1=visit(ctx.e1);
Double v2=visit(ctx.e2);
if (v1.equals(v2)) return 0.0;
else return 1.0;
}
public Double visitOR(implParser.ORContext ctx){
Double v1=visit(ctx.e1);
Double v2=visit(ctx.e2);
if (v1.equals(v2)) return 0.0;
else return 1.0;
}
public Double visitNum(implParser.NumContext ctx){
return null;
}
}
/*
class Expr{};
class var extends Expr{}; //Subclass
class Const extends Expr{}; //Subclass
class Multiplication extends Expr{}; //Subclass*/
ddd
// Generated from impl.g4 by ANTLR 4.8
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
public interface implVisitor<T> extends ParseTreeVisitor<T> {
T visitStart(implParser.StartContext ctx);
T visitSingleCommand(implParser.SingleCommandContext ctx);
T visitMultipleCommands(implParser.MultipleCommandsContext ctx);
T visitAssignment(implParser.AssignmentContext ctx);
T visitOutput(implParser.OutputContext ctx);
T visitWhileLoop(implParser.WhileLoopContext ctx);
T visitIfStatement(implParser.IfStatementContext ctx);
T visitOP(implParser.OPContext ctx);
T visitParenthesis(implParser.ParenthesisContext ctx);
T visitvariable(implParser.VariableContext ctx);
T visitMUL(implParser.MULContext ctx);
T visitConstant(implParser.ConstantContext ctx);
T visitNum(implParser.NumContext ctx);
T visitUnequal(implParser.UnequalContext ctx);
T visitEqual(implParser.EqualContext ctx);
T visitLess(implParser.LessContext ctx);
T visitLessOrEqual(implParser.LessOrEqualContext ctx);
T visitGreater(implParser.GreaterContext ctx);
T visitGreaterOrEqual(implParser.GreaterOrEqualContext ctx);
T visitAND(implParser.ANDContext ctx);
T visitOR(implParser.ORContext ctx);
}
任何帮助将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)