Оценка дерева

1

Я построил грамматику в antlr4 для json-подобного языка.

Файл Gramar: https://github.com/antlr/grammars-v4/tree/master/json

Как мне пересечь дерево с помощью функции "Посещение"? До сих пор у меня есть код ниже, который выводит поток токенов, но мне придется снова проанализировать его с помощью правил регулярного выражения, чтобы получить элементы и значения.

public void Visit(IParseTree tree)
    {
        for (int i = 0; i < tree.ChildCount; i++)
        {
            if (tree.GetChild(i).ChildCount > 0)
            {
                Visit(tree.GetChild(i));

            }
            else
            {
                Console.WriteLine(tree.GetChild(i).ToString());
            }
        }
    }

Я получаю дерево с:

        GramatikaLexer lexer = new GramatikaLexer(inputStream);
        CommonTokenStream commonTokenStream = new CommonTokenStream(lexer);
        GramatikaParser parser = new GramatikaParser(commonTokenStream);

        IParseTree tree = parser.start(); // start is entry point in .g4 file
Теги:
antlr4
antlr

1 ответ

0

Там должен быть GramatikaParserBaseVisitor<T> где-то вокруг которого можно использовать как базовый класс.

Затем вы можете переопределить виртуальные функции, такие как (здесь: T == object) object VisitStart(StartContext context), аргумент которого имеет более богатый интерфейс, чем IParseTree и вы можете получить доступ к IParseTree по имени, и они также печатаются, т.е. типа <Child>Context вместо простого IParseTree.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню