как начать писать очень простой язык программирования

Недавно я собирался искать идеи о том, что я могу построить, используя C этим летом, и я наткнулся на этот пост: Интересный проект по изучению C?

Внедрение языка программирования. Это не должно быть ужасно сложно – я сделал язык, который нельзя назвать, но он заставит вас изучить многие важные части C. Если вы не хотите писать лексер и / или парсер вы можете использовать lex / flex и yacc / bison, но если вы планируете, что вы можете начать с несколько меньшего проекта.

Я был немного заинтригован внедрением ответа на языковой язык программирования, и мне интересно, как мне это начать? Я просмотрел всю книгу K & R, и я тоже сделал некоторые упражнения. У меня также есть немного опыта работы на C ++ и Java, если это имеет значение. Какие-нибудь советы? Спасибо!

    Узнайте о регулярных выражениях, грамматиках и хорошем генераторе парсеров.

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

    Я бы начал с простой калькулятор калькулятор, который может читать такие вещи, как:

    5 + 10 * 3

    и напечатайте ответ. Затем вы можете продвигать его, чтобы добавить переменные, управлять streamом, даже функциями.

    Начните с очень простого (игрушечного) языка; позже вы можете создать более сложный синтаксис.

    Вы могли бы написать интерпретатор для синтаксического анализа строк, например,

     integer x integer y set x, 2 set y, 5 add x, y // x = x + y print x 

    и немедленно оценивайте каждую строку. Если вы сохраните строки в векторе, было бы легко реализовать петли с помощью команды goto .


    Пример, Другой мир (марочная игра)
    Редактор скриптов:

    alt text

    Могу ли я просто сказать, что многие люди задавали такие вопросы, как «Как мне создать язык программирования?» или «Как сложно сделать язык программирования», и большинство ответов просто говорят им, что вам нужно пройти годы университета и читать книги длиной 1000 страниц. Я здесь, чтобы рассказать всем, что вы можете опубликовать эти ответы, но это не помогает им в их путешествии, чтобы сделать язык программирования. Мне 16 лет, я занимаюсь программированием почти 2 года, и я пишу языки программирования. Довольно продвинутые объектно-ориентированные, но я не читал ни одной книги, я не делал 8-летнего университета. Чтобы начать работу, вот простой язык программирования, написанный на C #:

     string code = "print Hello World"; foreach (string a in code.Split('\n')) { if (a.StartsWith("print ")) { Console.WriteLine(a.Substring(6)); } } 

    любой, кто знает базовый C #, должен уметь это понимать. Вы не можете начинать создавать языки программирования, не имея опыта программирования. Удостоверьтесь, что вы изучаете язык программирования и удостоверяетесь, что знаете об этом много, а затем просто начинайте писать простые кусочки кода, например, я опубликовал, а с экспериментами и практикой вы начнете писать некоторые сложные языки программирования без время 🙂

    Ну, я думаю, что что-то вроде этого действительно сложно сделать, но это был бы отличный проект для домашних животных. У вас должны быть понятия парсеров, лексеров, управление streamами, парадигмы (императивные, функциональные, ОО) и многое другое.

    Многие люди говорят, что книга Дракона – одна из лучших книг для этого. Может быть, вы можете взглянуть на это 🙂

    Удачи!

    вы можете прочитать несколько хорошо написанных работ Никлауса Вирта:

    • «Compiler Construction» (доступно здесь ) представляет собой краткое, краткое введение в искусство построения компилятора.
    • «Алгоритмы + Структура данных = Программы» (к сожалению, недоступны для печати) представляет более простой язык (PL / 0) в его последней главе.

    хотя эти статьи в основном написаны на Паскале, представленные концепции легко перевести на C.

    Некоторое время назад я сделал простой парсер языка Java, в основном оценил математические выражения, заменил константы и переменные и предоставил некоторую обратную связь по ошибкам синтаксиса / типа.

    Самый простой способ, которым я нашел такое, – создать дерево parsingа . Это можно сделать легко, используя два стека, стек оператора и стек результатов. После этого вы можете просто проанализировать его рекурсивно с помощью DFS, возможно, используйте шаблон посетителя, если вы решите реализовать его на объектно-ориентированном языке.

    Об этом можно многое сказать, и если вы хотите, чтобы я мог объяснить их более подробно, я не сделал этого, потому что думал, что вы захотите попробовать реализовать вышеупомянутое, но если вы это сделаете, просто сообщите мне об этом и мы можем говорить.

    Схема из Scratch – это хорошая серия сообщений в блогах о внедрении схемы в C. Код очень читабельен, и каждая версия основывается на предыдущем, что легко поддается наблюдению.

    Вот первый взнос: v0.1 – Целые числа .

    Другой вариант – построить язык, не глядя ни на что другое. Выясните, что вы можете сделать легко, и оттуда. Например, вы можете разобрать выражения в списке токенов, разделяя их пробелами и использовать префиксную нотацию (с которой достаточно просто справиться). Такого рода вещи – огромное удовольствие, и вы можете многому научиться экспериментировать.

    Если вы говорите по-французски, вас может заинтересовать один из курсов моих коллег (свободно ansible) http://matthieuamiguet.ch/scientifique/enseignement/langages-et-compilateurs, хотя он использует Python для объяснения концепций построения и компиляции языка.

    Английский PDF из PyCon 2010 http://matthieuamiguet.ch/assets/files/scientifique/publis/TeachingCompilersWithPython_Paper.pdf

    Мне, возможно, придется поговорить с ним о переводе его информации на английский язык 8)

    Один старый учебник по компиляции – вот этот . Хотя это в Паскале, это очень хороший источник информации. Если вы хотите что-то более недавнее, вы должны взглянуть на ANTLR .

    Чтобы все было просто, я рекомендую внедрить простой постфиксный язык. FORTH или основная часть PostScript – отличный выбор.

    Прочитайте сообщения в compilationах comp.compiles usenet, они доступны через группы Google. В нем много дискуссий, связанных с построением языка, построением компилятора, lex / yacc, грамматиками и т. П. Разумеется, вам придется хорошо знакомство с такими classиками, как книга драконов, книга тигра среди многих книг по компиляторам и хорошие книги по алгоритмам и структурам данных.

    Оригинальному компилятору C дается новая жизнь. Большая часть его переписывается, а его кодовая база достаточно мала, чтобы ее можно было читать и понимать в летние каникулы. Рассмотрите возможность чтения кода вместе с документами, которые использовались для написания кода этого или любого рабочего компилятора, и я уверен, что вы получите представление о том, с чего начать и т. Д.

    Пусть кто-то другой сделает для вас грязную работу, а именно лексер и парсер. Используйте кубок, yacc или bison для обработки синтаксиса. Это позволит вам сосредоточиться на более важных решениях для языкового дизайна. Существуют даже примеры парсеров для многих языков, которые вы можете использовать в качестве шаблона для своих.