我正在尝试使用Bison创建AST。找到标识符后,我遇到了让野牛返回节点var
的指针的问题。
这是错误:
Error C2664 'VarDel::VarDel(VarDel &&)': cannot convert argument 1 from 'Var' to 'Node *'
这是Bison文件中的摘录:
%union {
Node *node;
Block *block;
//NExpression *expr;
//NStatement *stmt;
Statement *stmt;
Num *num;
Var *ident;
VarDel *var_decl;
std::string *string;
int token;
}
%token <string> TIDENTIFIER TINTEGER TDOUBLE
%token <token> TCEQ TCNE TCLT TCLE TCGT TCGE TEQUAL
%token <token> TLPAREN TRPAREN TLBRACE TRBRACE TCOMMA TDOT
%token <token> TPLUS TMINUS TMUL TDIV
%type <ident> ident
%type <num> numeric num
%type <block> program block stmts
%type <node> stmt var_decl
%type <token> comparison
...
var_decl : ident ident { $$ = new VarDel(*$1, *$2); }
;
ident : TIDENTIFIER { $$ = new Var($1->c_str()); delete $1; }
;
以下是涉及的节点类:
class VarDel : public Node {
public:
Node* typenode;
Node* varnode;
Node* assignNode;
VarDel(Node* ctypenode, Node* cvarnode) {
Node::nodeType = NODETYPE::VARDEL;
typenode = ctypenode;
varnode = cvarnode;
}
VarDel(Node* ctypenode, Node* cvarnode, Node* cassignnode) {
Node::nodeType = NODETYPE::VARDEL;
typenode = ctypenode;
varnode = cvarnode;
assignNode = cassignnode;
}
std::string toString() {
return "VarDel Node";
}
};
class Var : public Node {
public:
std::string identfier;
Var();
Var(std::string cidentfier) {
Node::nodeType = NODETYPE::VAR;
identfier = cidentfier;
}
std::string toString() {
return "Var Node";
}
};
为什么会出现此错误?我确定要使用ident
关键字从new
创建一个指针吗?
答案 0 :(得分:0)
感谢帮助人员
var_decl : ident ident { $$ = new VarDel($1, $2); }
; ^ ^
ident : TIDENTIFIER { $$ = new Var($1->c_str()); delete $1; }
;