使用byaccj构建ast时出现java错误
我正在使用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
# 1 楼答案
您的
program1
声明表示构造函数是:它接受一个
classexp
、一个String
和一个ArrayList<field_decl>
(如错误消息中的required:
行所示)。您正在为其提供:也就是说,一个
String
,另一个String
,和一个Object
(如错误消息中的found:
行所示)。为了使提供的参数适合所需参数,需要将第一个String
转换为classexp
,这是不可能的(如错误消息中的reason:
行所示)。还需要将第三个参数Object
转换为ArrayList<field_decl>
,这可能也是不可能的,但构造函数中的一个错误足以拒绝调用