Они генерируются на разных этапах процесса компиляции? Или это просто разные названия одного и того же?
94
Они генерируются на разных этапах процесса компиляции? Или это просто разные названия одного и того же?
Ответы:
Это основано на грамматике Expression Evaluator Терренса Парра.
Грамматика для этого примера:
Ввод
Дерево разбора
Дерево синтаксического анализа - это конкретное представление ввода. Дерево синтаксического анализа сохраняет всю информацию о вводе. Пустые поля представляют собой пробел, то есть конец строки.
AST
AST - это абстрактное представление ввода. Обратите внимание, что парные скобки отсутствуют в AST, поскольку ассоциации выводятся из древовидной структуры.
Для более подробного объяснения см. Компиляторы и генераторы компиляторов стр. 23
или абстрактные синтаксические деревья на стр. 21 в синтаксисе и семантике языков программирования
источник
Насколько я понимаю, AST больше фокусируется на абстрактных отношениях между компонентами исходного кода, в то время как дерево синтаксического анализа фокусируется на фактической реализации грамматики, используемой языком, включая мелкие детали. Это определенно не одно и то же, поскольку другой термин для «дерева разбора» - «конкретное дерево синтаксиса».
Я нашел эту страницу, которая пытается решить именно этот вопрос.
источник
Книга DSL Мартина Фаулера прекрасно объясняет это. AST содержит только все `` полезные '' элементы, которые будут использоваться для дальнейшей обработки, в то время как дерево синтаксического анализа содержит все артефакты (пробелы, скобки, ...) из исходного документа, который вы анализируете.
источник
Возьмите задание на паскаль Возраст: = 42;
Синтаксическое дерево будет выглядеть так же, как исходный код. Ниже я заключил узлы в скобки. [Возраст] [: =] [42] [;]
Абстрактное дерево будет выглядеть так [=] [Возраст] [42]
Назначение становится узлом с 2 элементами, возрастом и 42. Идея состоит в том, что вы можете выполнить задание.
Также обратите внимание, что синтаксис паскаль исчезает. Таким образом, один и тот же AST может генерироваться более чем одним языком. Это полезно для межъязыковых скриптовых машин.
источник
В дереве разбора внутренние узлы нетерминальные, листья терминальные. В синтаксическом дереве внутренние узлы являются операторами, а листья - операндами.
источник