anna_gp
@anna_gp
IT-student, part-time QA

Какие есть книги/руководства по разработке «простого языка программирования» для новичка?

Здравствуйте!

Руководитель дипломной работы предложил разработать "простой язык программирования для целей обучения". Я поняла его так - многие учебные задачи с использованием современных языков теряют смысл. (перевернуть массив? для этого есть готовая функция. написать сортировку - тоже есть. а если задача на динамических списках - студент сложит их в массив и радуется) только вручную проверять, правильно ли написал. А хорошо если есть язык в котором опцией выключаются массивы например или циклы. И конечно минимум готовых функций.

Проблема что я умею программировать на базовом уровне но про "разработку языков программирования" идей ноль. Гугл подсовывает мегасложные трактаты и статьи, или может не так ищу. Если подскажете какую-нибудь книжку или статью ориентированную на новичков - буду благодарна. Пока разобралась только что делать буду интерпретируемый а не компилируемый язык, для упрощения. Руководитель сказал это ок.
  • Вопрос задан
  • 357 просмотров
Пригласить эксперта
Ответы на вопрос 6
AlexNest
@AlexNest
Работаю с Python/Django
Компиляторы: принципы, технологии и инструменты

ориентированную на новичков

Вряд ли такие есть. Точнее статьи есть, полно их, но во всех что я видел сразу же приводится реализация этого компилятора.
Ответ написан
Комментировать
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Рекомендую начать с Форта: минимальный интерпретатор пишется за один-два вечера за чашкой чая. Форт очень простой, гибкий и очень мощный. Он позволяет реализовывать достаточно простым способом проблемно-ориентированные ЯП (DSL). У него крайне простой синтаксис - это просто слова, отделенные разделителем (пробелом). И всё! Проще не бывает. Для передачи аргументов используется стек. Математика реализуется обратной польской записью: число, число, оператор. Типа 1 2 +. Если смотреть с классической позиции, то Форт - это интерпретируемый И компилируемый процедурный ЯП высокого И низкого уровня. Почему одновременно и высокого и низкого? Потому что существуют Форт-процессоры в кремнии, для которых Форт - ассемблер (т.е. все слова сразу интерпретируются/компилируются в машинные коды без дополнительной прослойки). А ассемблер - это ЯП низкого уровня. Процедурный - потому что слово может как забрать любое число элементов со стека, так и оставить на стеке любое их число (а не только один аргумент как в функциях). Гибкость же языка реализуется открытостью его движка - можно на лету менять правила интерпретации, компиляции и даже в рантайме все это переписывать, перекомпилировать и прочее. Например, знаменитое сишное определение #define TRUE FALSE заиграет новыми красками, ибо его можно провернуть в рантайме не особо напрягаясь. А еще можно управлять стеком возвратов (это список адресов, куда продолжается поток управления после завершения процедуры) - GOTO в сравнении с этим в ужасе трясется под лавкой. Самое известное приложение для Windows, в котором раскрыты все возможности форта - это nnCron: один из мощнейших автоматизаторов для Windows.
В качестве дипломной работы реализация Форта подойдет великолепно и чего-то лучше вы вряд-ли найдёте (проверено лично, если что).
Литература


Ссылки на англоязычные ресурсы из мана ннкрона:

И наше русское Форт-сообщество находится вот тут: fforum.winglion.ru
Ответ написан
hottabxp
@hottabxp
Сначала мы жили бедно, а потом нас обокрали..
saboteur_kiev
@saboteur_kiev Куратор тега Книги
software engineer
Руководитель дипломной работы предложил разработать "простой язык программирования для целей обучения". Я поняла его так - многие учебные задачи с использованием современных языков теряют смысл. (перевернуть массив? для этого есть готовая функция. написать сортировку - тоже есть. а если задача на динамических списках - студент сложит их в массив и радуется) только вручную проверять, правильно ли написал. А хорошо если есть язык в котором опцией выключаются массивы например или циклы. И конечно минимум готовых функций.


А кто мешает написать свою структуру данных, и методы для работы с ней, и не "отключать массивы", а просто не пользоваться ими?

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

Я бы на твоем месте уточнил бы детали у препода, на каком уровне требуется это сделать.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Я отметил совет Нестерова как решение. Но добавлю.

Тебе нужно подойти к преподавателю и задать ему макимальное число вопросов
по поводу того что он хочет на самом деле видеть. Желательно сузить постановку
до такого уровня чтоб ты успела за семестр это сделать. Например делать
транслятор сразу без файлов и сетевого I/O. Пускай это будет просто REPL
консоль как в ранних версиях Haskell.

Есть софистические языки наподобие Brainfuck и Нормальных алгоритмов Маркова.
Они тоже являются языками но скорее экспериментом доведенным до крайности
чем практически полезным. Их можно реализовать за пару дней на любой другом
императивном языке.

Разработка Форт-подобного языка мне тоже кажется набиолее выгодной с точки
зрения цена/производительность но Форт это достаточно нишевый язык и препод
может быть недоволен. Возможно он хотел какие-то более развитые грамматики
а не токько words and spacers.

Можно разработать простейший Лисп но я не уверен что тут в семестр уложишся. Тем
более что у тебя только базовый уровень всего остального. Но Лисп транслятор
на минималках
был бы самой красивой курсовой работой на потоке.
Ответ написан
Комментировать
@basili4-1982
Как фундаментальную работу. Я бы советовал книгу "дракона".
https://www.ozon.ru/product/kompilyatory-printsipy....
Если нет особых требований то можно реализовать не сложную "Машину Тьюринга" с небольшим набором команд.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы