Javascript-форум (https://javascript.ru/forum/)
-   Работа (https://javascript.ru/forum/job/)
-   -   Заказ транслятора входного кода на выходной код (https://javascript.ru/forum/job/84076-zakaz-translyatora-vkhodnogo-koda-na-vykhodnojj-kod.html)

Дмитрий Луценко 30.05.2022 19:01

Спасибо за Вашу критику
Получается, можно сделать следующие выводы:
- Реализация компилятора на JS - гиблое дело.
- Лучше самому изучать учебники по компиляторам и хоть как-то сделать этот проект, нежели просить кого-то сделать его. Проблема в том, что я не могу сделать сам, не хватает уверенных знаний и терпения.

Вот то, что мне сказал преподаватель:
- сделай лексический анализатор (выведи результат его работы), передавай результат в следующий анализатор
- сделай синтаксический анализатор (выведи результат его работы) , передавай результат в следующий анализатор
- сделай семантический анализатор (выведи результат его работы), передавай результат на синтезатор
- Синтез кода (выведи результат его работы).

Вот тебе список того, что должна распознать программа(int,<название_пере енной> if, else и далее по требованиям)
На чем делать будешь анализаторы и синтезатор - выбирай сам.
Язык входной грамматики - какой хочешь
Язык выходной грамматики - какой хочешь.

Библиотеки flex, bison и тп не используй. Нужна собственная реализация.

Это были все требования преподавателя, я практически буквально его процитировал.

Можно тогда получить советы: Как правильно составить ТЗ, чтобы все его поняли, или как мне реализовать каждый шаг?

Сейчас критику я воспринимаю спокойнее, торопиться мне уже некуда.
Просто хочу уже закрыть вопрос с этим несчастным компилятором.

Дмитрий Луценко 31.05.2022 12:23

Согласно всем обсуждениям, написать транслятор на JS - задача трудновыполнимая и дорогостоящая.

Зазря только всех всполошил да и сам свое время потерял.
Спасибо большое за ваши советы и критику.

Буду решать своими силами, на сколько это возможно.

Gvozd 31.05.2022 15:38

Она такая же трудновыполнимая, как и в другом языке.

Не имея профильных знаний, она содержит ряд подводных камней, которые решаются правильной архитектурой синтаксического анализатора, что приводит к сложностям когда куча кода написано, и к тому не знаешь всех этих нюансов и видов грамматик

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

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

Так что с вашим бюджетом, вам к студентам
Да и шанс, что со относительно свежими знаниями в голове студент не сольется спустя неделю - выше
Может стоит поискать среди студентов вашего факультета?

Gvozd 31.05.2022 15:44

Студенты вашего факультета будут потенциально лучше из-за одинаковой программы
Потому что объем и качество изучаемого материала может отличаться

Где-то для сдачи достаточно написать калькулятор, и хорошо если не с польской нотацией
А где-то есть отдельные подробные факультативы с очень глубоким изучением теории грамматик, и вроде даже исследование новых подходов(в общем случае разбор грамматики идет в комплекте с отдельным математическим аппаратом)

Gvozd 31.05.2022 15:59

Также хочу отметить что 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, время: 20:07.