@frilix
Иногда "творю"

Синтаксический анализатор?

Доброго времени суток, я являюсь студентом, ну как и всем студентам, которые занимаются программированием нам задали написать компилятор с языка высокого уровня надо перевести в ассемблер, самое странное в этой ситуации, что мы на 2 курсе, причем нам еще не читали ассемблер, но дело не в этом. Так вот взял себя в руки, выбрал паскаль и начал писать, так я написал лексический анализатор, который довольно таки неплохо работает и строил таблицу символов. Далее настала пора синтаксического анализа. Для начала я с использованием БНФ нотации создал правила языка и запрограммировал, и теперь у меня проверяется если предложения подходит под правила языка. На этом же этапе я сделал небольшой семантический анализ, то есть проверку того, объявлена ли переменная и все в таком роде.
Все бы хорошо, но вот настала пора генерации кода ( делаю компилятор для сильно упрощенного языка). Я сделал часть объявления кода, благо таблица символов есть, типы есть и переменные тоже, в общем радости не было предела, но тут возникла проблема, а как сделать остальную часть. Ради эксперимента, да и по рекомендации построил дерево для выражений при обходе которого можно получить постфиксную запись выражения, а вот дальше я в ступоре.
Во-первых, я читал что на стадии синтаксического анализа строятся деревья разбора, не могли бы вы объяснить глупому второкурснику в чем их цель ? ( лично я подозреваю, что для генератора, то есть он должен сделать обход этих деревьев и в зависимости от типа нетерминала сгенерировать соответствующий код)
Во-вторых, как лучше сделать генератор кода и эти деревья разбора? Просто там же есть всякие циклы и условия, что делать для них и так далее.
В-третьих, подскажите толковую литературу для глупых? Просто я не понимаю, когда читаю про деревья разбора, не понимаю цели, не понимаю как их строить, в общем не понимаю как это чудо творится.

PS. Преподаватель нам читает на лекциях только теоремы да лемы, объяснять ничего не собирается, что возмущает до глубины души, я конечно понимаю, что программист должен сам разобраться, но дело то в том, что нам ни ассемблер не читали, ни теории, делай что хочешь и как хочешь. Буду рад вашей помощи и советам.
  • Вопрос задан
  • 347 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy
Android developer at Yandex
В целом вы верно поняли про деревья разбора. Тема довольно обширная, освещать её в ответе здесь - сложно. Я бы посоветовал вот эту книжку: ftp://sp.cs.msu.ru/victor/compilers.pdf
Там довольно подробно освещено это всё.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@iv_k
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы