如何从lemon获取AST(抽象语法树)的根节点?我尝试使用%extra_argument { Node *rootNode }
并使用以下代码返回根节点对象。
program ::= statements(A). { rootNode = A; }
但是根节点,主解析函数中的根节点保持为空。
这是主要的解析功能。
Node parse()
{
void* parser = ParseAlloc(malloc);
int token;
Node astRoot;
while (token = yylex())
{
Parse(parser, token, yytext, &astRoot);
}
Parse(parser, 0, NULL, &astRoot);
ParseFree(parser, free);
return astRoot;
}
有人可以帮忙吗?预先感谢。
答案 0 :(得分:0)
rootNode
是一个指针。您正在更新局部变量rootNode
。尝试在复制时取消引用:
program ::= statements(A). { *rootNode = *A; }