0

如何从柠檬中获取 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;
}

任何人都可以帮忙吗?提前致谢。

4

1 回答 1

0

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

program ::= statements(A). { *rootNode = *A; }
于 2019-05-07T22:17:06.693 回答