如何从柠檬中获得生成的AST?

时间:2019-05-07 12:41:36

标签: parsing lemon

如何从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;
}

有人可以帮忙吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

rootNode是一个指针。您正在更新局部变量rootNode。尝试在复制时取消引用:

program ::= statements(A). { *rootNode = *A; }