Заказ транслятора входного кода на выходной код
Вложений: 1
Добрый день.
Мне требуется написать
Входным языком выбран урезанный синтаксис кода на C++. Пример входного языка (который полностью удовлетворяет требования по урезанному синтаксису входного языка). Код:
int var_a = +1; Сроки, бюджет, общие требования:
Оплата работы Предлагаю 2 варианта схем работы-оплаты:
Предоплата нежелательна. Я описал 2 варианта схемы сверху, которые дадут нам равные гарантии. Внимание: Ознакомьтесь, пожалуйста, с текстом заказа. Решите для себя, готовы ли Вы выполнять этот заказ. Многие исполнители, с которыми я работал по этому заданию, спустя неделю отказывались выполнять заказ из-за сложности реализации. Какие знания Вам необходимы/пригодятся:
|
Лексический анализатор
Лексический анализатор предполагает разбиение слов и символов входного кода на токены (классификаторы), которые будут записаны в массив токенов. например, строка Код:
int summa = 0; Код:
[ Синтаксический анализатор: Полученный на лексическом анализе массив токенов необходимо преобразовать в виде абстрактного синтаксического дерева. Таким образом проверяется корректность структуры набора токенов, правильно ли строится блок кода. L_TYPE L_VARIABLE (int abc) показывает синтаксически правильное объявление переменной. L_VARIABLE L_TYPE (inty int) - является синтаксически некорректным, т.к L_VARIABLE ожидает либо "=", либо операций сравнения (<, >, ==, !=, и тд), либо ";". А L_TYPE ожидает перед собой либо }, либо ";", а после себя только L_VAR (название переменной.) Дерево таким образом построить не получится(ведь с точки зрения, к примеру, бинарного дерева, у которого должны быть заполнены и левая и правая ветвь, одна из ветвей будет пустовать, чего быть не должно). Код:
int summa = 0; Итоговое дерево для объявления и инициализации переменных: Семантический анализ. Итоговое дерево после синтаксического анализа должно быть проверено на соответствие типов переменных и их значений. Код:
summa = 0; Синтез кода Проверенное семантическим анализом дерево должно быть свернуто в программу на выходном языке Питон. |
Скриншот дерева на этапе синтаксического анализа:
https://prnt.sc/AhC5FVOiv5ia |
Это форум посвященный ЯП JavaScript, а вам нужен специалист, владеющий языками C++ и Python. Не находите это странным?
В итоге ваш транспайлер должен уметь только: 1. работать с целочисленными; 2. работать с декларацией переменных; 3. правильно разбирать if else; 4. производить примитивные математические операции с целочисленными; 5. выводить информацию в stdout? + иметь web-интерфейс, написанный без использования каких-либо библиотек или фреймворков? Я правильно понял? Я совершенно точно не являюсь кандидатом на выполнение вашего задания, т.к. не владею нужными языками и я никогда не писал транспайлеров. НО! мне кажется, что работы даже с этим минимумом тут не меньше чем на рабочую неделю в режиме fulltime. А вы, как я понял, предлагаете за нее 10 тысяч рублей, т.е. часовая ставка специалиста получается равна 250р./час. На выполнение задания вы даете по меньшей мере 3 полных месяца (и даже можете подвинуть сроки), т.е. вы либо рассчитываете на очень неторопливое выполнение задания, либо реальная продолжительность работ может легко выйти за пределы пары месяцев. Если второе предположение истинно, то неудивительно, что «Многие исполнители [...] спустя неделю отказывались выполнять заказ из-за сложности реализации». Кто будет работать хотя бы месяц за 10к рублей? В любом случае, ваш изначальный бюджет слишком низок для такой задачи. |
Видите, выше уже уточняют что вы имеете ввиду под "урезанный синтаксис", а все потому что вы не составили никакого ТЗ по задаче.
В результате задачу можно трактовать совсем по разному, не скажу за c++, но в языках как php, js, тот же оператор switch имеет массу тонкостей, представления чисел и строк имеют кучу особенностей и вариантов. А сколько операторов... Разобраться чуток в синтаксисе с++ и выяснять от вас только по ТЗ выглядит как усилий минимум часов на 10, а для опытного человека это и будет весь ваш бюджет. Плюс, я думаю, мало кто в реалии с такими "учебными", для курсовых, задачами сталкивался и особенности проблем трансляции можно выяснить только копнув эту тему, а кто из профи станет этим заниматься без предоплаты? А этот код что вам наваяли, это вы чьи то попытки даете, чтобы с них продолжали? |
- Заказ состоит в том, чтобы написать Транслятор на JS + HTML, поэтому это ничуть не странно (Есть даже видео: "Как написать свой язык программирования" на TypeScript + NodeJs, а мне же требуется написать на чистом JS).
- Мне не требуется определять все виды конструкций: Достаточно распознать - Целочисленный тип int, - Любое наименование переменной ([a-zA-Z_]{1,}[0-9]{0,}) - Целочисленное значение [0-9]{1,} - Арифметические операции + - * / - Инкремент/декремент (достаточно постфиксного) ++ -- - Конструкцию if - else (может быть и 2 уровня вложенности) - Булевы операции сравнения (<, >, >=, <=, !=, ==) - Можно обойтись и без метода вывода printf, cout и тп. Мне не требуется определять кастомные функции и методы (int main() {}, int Fact(int i) {} и тп). Просто представьте, что Вы вводите код в функцию main(){//Входной код сюда }. Это примитивный синтаксис языка С++, мне парсить все операции, операнды, подключения библиотек, прототипы и тп не нужно Так что мой текущий лексический анализатор делает ровно то, что нужно и чего вполне достаточно. Что касается сроков: Как я уже ранее говорил, мне уже не горит выполнение задачи, сроки уже давно прошли, но сделать этот проект надо. Почему 3 месяца даю? Все просто. На схожих тематических форумах я заказывал эту же самую работу, но язык реализации был на выбор исполнителя. Давался ровно месяц до моего личного дедлайна, когда надо было сдавать проект. У меня по итогу было 4 исполнителей, которые брали по 1-й неделе на "разобраться / посмотреть / оценить", а после отказались выполнять, даже с предоплатой, т.к скорее всего не обладали нужными знаниями/опытом. На них я зла не держу, но к сведению принял, что могут быть и такие исходы. Я даю такой срок, чтобы человек успел разобраться/посмотреть/оценить и смог выполнить этот заказ. Что про бюджет: Очень мало - не конкретная сумма. Дайте мне, пожалуйста, оценку стоимости работы, если это стоит 15 000, окей, я готов и эту сумму заплатить, но дайте мне конкретную оценку. (Например, моя ставка в часах 200 рублей, по моему опыту, времязатраты на схожие проекты заняли у меня до 2 недель при выделении 3 часов на Ваш проект в сутки - 3 * 14 = 42 час в неделю, 42 * 200 = 8400, дополнительная стоимость: 50% от стоимости в качестве премиальной части - 12600 руб. Ведение документации 1000 рублей, ..... Окончательная стоимость: 15 000 руб. ). Все, по этим расчетам я уже вижу, что набирается 15 000. Значит, это столько стоит. Плюс я буду знать, что исполнитель будет делать и сколько времени у него это займет. Я понимаю, что это фриланс, и наши трудоотношения ничем не подкреплены, но все же хочется понимать, за что просят 20 000, 30 000, 50 000 и тп. |
Я дополнил, хотя ранее указывал в начале топика, какой код полностью удовлетворяет требованиям синтаксиса входного языка/входа.
Код я делал сам, не шедевр, знаю. Можно и переписать, если проще начать все с нуля. По предоплате я уже отписался, что она нежелательна. Имеется негативный опыт (Эту же самую работу брали и по предоплате, по истечению недели отказывались делать, после пришлось напоминать о возвращении авансовой части). Так что согласен оплачивать готовую часть функционала (показали синтаксический анализатор и он работает - отправляю 1/3, Показали Семантический анализатор - еще 1/3, показали синтез кода - оплачиваю оставшуюся часть) |
Цитата:
А денежку я согласен платить только тому, кто согласен взяться за работу:) |
Ваше предложение рассчитано имхо на школьников, которым возможно будет интересно попрогать такую вещь для практики, и сделать это для мотивации за символическую сумму.
Поэтому и валятся ваши исполнители, чуток поняв задачу. Т.е. они как и вы, что то там начали, но продолжить не в силах, даже несмотря на такую прорву времени как 3 мес, которые у вас есть. |
Этот товарищь всплывал полгода назад на форуме sql.ru где ему дали вполне конструктивную критику и объясняли почему то что он хочет таким способом реализовать не получиться.
Приведенный код яркий пример реализации паттерна да придет спаситель. https://www.youtube.com/watch?v=aKPbB_TfTR4 Ну а вообще если хочешь реализовать этот проект тебе стоит разобраться с таким понятием как грамматики языка в приведенном коде есть попытка грубой силой (простым условным ветвлением) выделить лексемы языка это закономерно приводит к потере контекста и структуры в которых используются эти части языка что и делает выделение этих лексем (токенов) бессмысленным занятием, происходит вырывание их из их контекста. Если объяснять по простому то твоя задача из кода в виде текста создать структуированную информацию об этом коде обычно это называют AST деревом. Ну и в целях общего развития необходимо научится использовать критику в свою пользу. небольшая лекция - https://coub.com/view/2eqj35 |
Часовой пояс GMT +3, время: 23:54. |