2015-08-20 1 views
0

В настоящее время я пытаюсь создать парсер LL. Однако у меня уже есть моя BNF-грамматика, но мне нужно создать АСТ, и у меня есть несколько вопросов.разница между LL-парсером и AST

я нашел на Google этот учебник, который объясняет многое о строить AST иначе, они не объясняют, как знать, если я должен взять правую ветвь или левую ветвь.)

Thank's

ответ

1

AST - абстрактное синтаксическое дерево - это дерево, которое кодирует логическую структуру программы, которая была предоставлена ​​в качестве входных данных для компилятора. Как правило, задачей внешнего интерфейса компилятора является создание AST для входной программы и аннотирование его полезной информацией, которую может использовать оптимизатор и генератор кода для создания выходной программы.

Как правило, часть компилятора, которая фактически генерирует AST, называется парсером . Существует много разных классов парсера, из которых парсеры LL являются одним из популярных семейств. Анализаторы LL часто могут быть написаны вручную, но они часто генерируются автоматически с использованием средств генерации компилятора.

Другими словами, ответ на ваш основной вопрос о том, какая разница между АСТ и парсером LL, является «парсер LL - это тип парсера, а синтаксический анализатор - это то, что генерирует AST».

Ваш следующий вопрос: как вы строите AST из грамматики BNF. Как правило, вы не строите AST для самой грамматики BNF. Вместо этого грамматика будет направлять конструкцию синтаксического анализатора, и тогда синтаксический анализатор будет строить АСТ. Фактически создание парсера обычно является темой, охватываемой стандартным курсом компиляторов. Если вам интересно, I have a set of lecture slides available from the last time I taught a compilers class, а также лекции 02, 03 и 04, рассмотрим синтаксический анализ и как спроектировать и построить парные анализаторы LL. Надеюсь, они дадут вам толчок в правильном направлении!

+0

Читатели: Я просмотрел слайды курса. Они очень хорошие. –