(Вы устали видеть только сообщения WebDev на этом сайте? По крайней мере, я абсолютно.)
Эта идея побочного проекта сидела в моем списке дел слишком долго. Теперь, когда я закончил ядро своего генератора Lexer, я хотел бы проверить его на чем -то простом, так что …
Язык
Дизайн по числам это язык образовательного программирования, разработанный профессором MIT Джоном Мадой в конце 1990 -х, который впоследствии породил гораздо более известного Обработка Анкет В отличие от обработки, источник дизайна по числам никогда не был официально выпущен для общественности. У меня нет книги профессора Маэды, поэтому я вынужден иметь некоторые предположения о реальном языковом дизайне, я думаю …
План
Если у вас, ребята, есть какой -либо интерес к чему -либо, кроме просто веб -режима, то есть вероятность, что вы знаете, что обработка (и DBN) находится на Java. Еще в конце 1990 -х годов Java так же заметна, как JavaScript (если не больше) – И да, вы можете встроить их в веб -страницы Так что это был очевидный выбор, но, конечно, в настоящее время, если я действительно хочу, чтобы кто -то использовал мою реализацию для отображения своих программ DBN, мне определенно придется основывать все в браузере JS.
Я потратил немного времени, разобрав план:
- Я постараюсь выяснить – и решите, если это необходимо – что именно такое синтаксис, грамматика и семантика языка.
- Я напишу переводчика для языка DBN, притворяясь, что я уже реализовал все фактические подпрограммы рисования. Чтобы проверить вещи, у меня будут заполнители, например, Вместо того, чтобы на самом деле нарисовать линию, я распечатаю это
Наритка
в консоли. - Тогда я действительно внедрим все подпрограммы чертежа, используя Canvas API Анкет
- И, может быть, я напишу о процессе.
О генераторе Lexer, который я упоминал в начале
Я написал это как часть моего набора инструментов, потому что я не могу понять, как вписать другие инструменты, такие как ANTLR, в мой рабочий процесс (И мой разум не любит читать код и конфигурации других людей)
Основная идея генератора Lexer – это:
- Лексические структуры большинства языков программирования могут быть описаны с помощью куча режимов.
Вы можете «скомпилировать» эту кучу regexps в НЕТЕТЕРЕСМИНСКИЙ ЛИЧНЫЙ АВТОМОТ (NFA) используя Некоторые алгоритмы строительства Анкет
- Afaik Это, вероятно, то, как (по крайней мере, некоторые) двигатель Regexp на самом деле работает; Структура NFA не может быть явной, но дух будет там.
- NFA:
- может быть дополнительно сгенерирован во что -то вроде это Анкет
- может быть непосредственно выполнено с помощью алгоритма обхода автоматов.
- или в комплекте с фактическим кодом алгоритма обхода.
Объедините эти факты вместе и вуаля, у вас есть собственный генератор Lexer. На самом деле это не так сложно, как только вы поймете. Нет, я не буду отпускать это, прежде чем завершить все это … DBN – это такой простой язык, который вам, вероятно, не понадобится каким -либо сложным инструментом.
Я прочитал введение, но DBN не является реальным языком программирования (по крайней мере, не таким «реальным», как что -то вроде Python), тогда какой смысл?
Ну, если тебе нужно так сказать …
- DBN, по сути, столешница Что (если мы допустим BigInt, чтобы мы могли просто кодировать вещи), это Тьюринг-полное (хотя в очень «неудобно для программирования»
- Даже если это слишком не хватает для наших вкусов, его можно легко подавать в качестве основы, когда можно добавить различные расширения.
Оригинал: “https://dev.to/bctnry/to-implement-a-tiny-programming-language-part-0-2fo8”