Как получить сгенерированный АСТ из лимона? - PullRequest
0 голосов
/ 07 мая 2019

Как мне получить корневой узел AST (абстрактного синтаксического дерева) из lemon ? Я попытался использовать %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 голосов
/ 08 мая 2019

rootNode - указатель. Вы обновляете локальную переменную rootNode. Попробуйте разыменовать его при копировании:

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