0

我正在使用 jflex 和 byaccj 来构建 AST。我无法解决错误并且我使用了类型转换,但错误仍然存​​在

对于语法中的以下规则:

program : CLASS Program '{' field_decl '}'      {
                program1 $$ = new program1($1.sval, $2.sval, $4.obj);
        }
        ;

我已经在我的.java文件中声明了这一点

abstract class program extends ASTnode{
}

class program1 extends program {
  private classexp ce = null;
  private String id="Program";
  private ArrayList<field_decl> fdecl = null;
  public program1(classexp ce,String id, ArrayList<field_decl> fdecl) {
    super();
    this.ce = ce;           
    this.id = id;
    this.fdecl = fdecl;
  }
}

错误是:

{program1 yyval= new program1(val_peek(4).sval,val_peek(3).sval,val_peek(1).obj);}
               ^
required: classexp,String,ArrayList<field_decl>
found: String,String,Object
reason: actual argument String cannot be converted to classexp by method invocation conversion
1 error
4

1 回答 1

1

您的声明program1说构造函数是:

public program1(classexp ce,String id, ArrayList<field_decl> fdecl)

它需要 a classexp, aString和 an ArrayList<field_decl>(如required:错误消息中的行所示)。您为它提供:

new program1(val_peek(4).sval,val_peek(3).sval,val_peek(1).obj)

也就是说, a String、 anotherString和 an Object(如found:错误消息中的行中所示)。为了使提供的参数适合所需的参数,有必要将第一个转换String为 a classexp,这是不可能的(如reason:错误消息中的行所示)。还需要将第三个参数 anObject转换为 an ArrayList<field_decl>,这可能也是不可能的,但构造函数中的一个错误足以拒绝调用。

于 2014-09-29T21:23:47.290 回答