我正在使用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
答案 0 :(得分:1)
你的program1
声明说构造函数是:
public program1(classexp ce,String id, ArrayList<field_decl> fdecl)
需要classexp
,String
和ArrayList<field_decl>
(如错误消息中的required:
行所示)。您提供的是:
new program1(val_peek(4).sval,val_peek(3).sval,val_peek(1).obj)
也就是说,String
,另一个String
和Object
(如错误消息中的found:
行所示)。为了使提供的参数符合所需参数,有必要将第一个String
转换为classexp
,这是不可能的(如reason:
行所示。错误信息)。还需要将第三个参数Object
转换为ArrayList<field_decl>
,这可能也是不可能的,但构造函数中的一个错误足以拒绝该调用。