Я пытаюсь создать AST с Bison. У меня возникают проблемы с получением Bison для возврата указателя узла 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
?