Спасибо за Вашу критику
Получается, можно сделать следующие выводы: - Реализация компилятора на JS - гиблое дело. - Лучше самому изучать учебники по компиляторам и хоть как-то сделать этот проект, нежели просить кого-то сделать его. Проблема в том, что я не могу сделать сам, не хватает уверенных знаний и терпения. Вот то, что мне сказал преподаватель: - сделай лексический анализатор (выведи результат его работы), передавай результат в следующий анализатор - сделай синтаксический анализатор (выведи результат его работы) , передавай результат в следующий анализатор - сделай семантический анализатор (выведи результат его работы), передавай результат на синтезатор - Синтез кода (выведи результат его работы). Вот тебе список того, что должна распознать программа(int,<название_пере енной> if, else и далее по требованиям) На чем делать будешь анализаторы и синтезатор - выбирай сам. Язык входной грамматики - какой хочешь Язык выходной грамматики - какой хочешь. Библиотеки flex, bison и тп не используй. Нужна собственная реализация. Это были все требования преподавателя, я практически буквально его процитировал. Можно тогда получить советы: Как правильно составить ТЗ, чтобы все его поняли, или как мне реализовать каждый шаг? Сейчас критику я воспринимаю спокойнее, торопиться мне уже некуда. Просто хочу уже закрыть вопрос с этим несчастным компилятором. |
Согласно всем обсуждениям, написать транслятор на JS - задача трудновыполнимая и дорогостоящая.
Зазря только всех всполошил да и сам свое время потерял. Спасибо большое за ваши советы и критику. Буду решать своими силами, на сколько это возможно. |
Она такая же трудновыполнимая, как и в другом языке.
Не имея профильных знаний, она содержит ряд подводных камней, которые решаются правильной архитектурой синтаксического анализатора, что приводит к сложностям когда куча кода написано, и к тому не знаешь всех этих нюансов и видов грамматик Такую задачу может решить толковый студент с профильным образованием, у которого свежи знания по конкретно это области Среди зрелых программистов задача написания парсера, тем более на столь фундаментальном уровне - не является частой задачей, и фактически представляет собой рокет-саенс Даже для тех, кто в свое время изучал эту тему в универе - без повторного применения эти знания весьма легко забываются Соответственно среди зрелых программистов решить задачу, в том числе с подводными камнями может далеко не каждый - нужно определенное упорство, и готовность подтянуть теоретический материал За эти качества и нетиповую работу и ценник будет соответствующий Так что с вашим бюджетом, вам к студентам Да и шанс, что со относительно свежими знаниями в голове студент не сольется спустя неделю - выше Может стоит поискать среди студентов вашего факультета? |
Студенты вашего факультета будут потенциально лучше из-за одинаковой программы
Потому что объем и качество изучаемого материала может отличаться Где-то для сдачи достаточно написать калькулятор, и хорошо если не с польской нотацией А где-то есть отдельные подробные факультативы с очень глубоким изучением теории грамматик, и вроде даже исследование новых подходов(в общем случае разбор грамматики идет в комплекте с отдельным математическим аппаратом) |
Также хочу отметить что 3 подзадачи не равноценны по сложности
Синтез кода из дерева - тривиальная прикладная задача Семантика - чутка посложнее, но в вашем случае не сильно А вот синтаксис - представляет собой основную сложность всей задачи Поэтому я бы предложил пересмотреть план оплаты, перебросив большую часть оплаты в первую часть, и в свою очередь разбив ее на несколько частей, с постепенно нарастающим синтаксисом В качестве первой вехи(рискую предположить, что на этом этапе уже часть разработчиков отсеется после пробы), поддержать синтаксис только объявление переменных с таким тестовым примером int a = 1, b, c = 2; int d = 3; Его особенность в том, что в нем есть 1. под-список из разных типов нод(VariableDeclarator с инициализацией и без) 2. под-список из одинаковых сущностей(VariableDeclaration-ы) Захват под-списка, без зацикливания - это один из примеров, который отделяет правильно выбранную архитектуру для данного типа грамматики Затем усложнить пример до int a = 1, b, c = 2; cout << a; int d = 3; Тут уже VariableDeclaration-ы перемешаны с Statement-ами Ну а затем остальные пункты синтаксиса |
Часовой пояс GMT +3, время: 10:32. |