Я наконец начал понимать сложность создания интерпретатора и компилятора. Я построил несколько версий TinyBasic, 1964 (Dartmouth) Basic и свои собственные расширения на этих языках, прежде чем перейти к этой точке. Самый последний проект, который я называю Open Source Basic ... потому что я не мог придумать никаких других возможностей языка, которые интересовали бы людей. Чтобы иметь возможность открыть источник языка и понять, как выполняются некоторые сложные вещи (как выполняется сканирование, анализ, интерпретация и компиляция)
Open Source Basic сначала интерпретируется на основе стекового языка. Этот основанный на стеке язык затем интерпретируется и выполняется немедленно или превращается в исполняемый файл CLR.
Все мои вопросы сводятся к следующему:
- Каковы основные особенности / конструкции языка на основе Basic? У меня уже есть эти основные конструкции: присваивания, выражения, переменные, некоторые функции (Random, ToUpper, ToLower), циклы (для и до / во время / до), If (блочные и однострочные), другие решения, консольный ввод (ввод ) и вывод (Печать), и подпрограммы (пока без параметров).
- Когда я «закончу», добавив базовые конструкции на мой язык - как мне перейти? В какие домены? Другими словами, в каком направлении следует выбрать базовый язык с открытым исходным кодом, когда все общие конструкции работают?
Спасибо за ваше время,
Доминик
источник
Ответы:
Мой опыт работы с ранним BASIC на Commodore [Vic-20, C-64] дал мне впечатление, что номера строк были основной «особенностью» BASIC. Кажется, что они больше не используются в современных реализациях, что для меня является чем-то вроде ущерба, так как мой основной взгляд на BASIC - это язык обучения, с которого можно перейти на что-то другое.
источник
Определенно благородное начинание, но я думаю, что у вас поменялись приоритеты.
Ваша первая проблема должна касаться проблем «домена», на которые ориентирован ваш язык. Вот почему он называется «Язык, специфичный для предметной области». DSL допустим только тогда, когда он маленький, простой и очень узко сфокусированный для решения определенного набора проблем, таких как нож сквозь масло.
После того как вы определили домен и то, как ваш язык будет работать в домене, вы можете установить конкретные конструкции или функции.
Наконец, может быть полезно подумать, нужен ли вам внутренний или внешний DSL .
источник
Я разрабатывал язык сценариев для приложения CAE / FEA, и некоторые функции, которые я нашел полезными для конечных пользователей: Локальные и глобальные переменные Матрицы с динамическим размещением и расширением Функции с аргументами и передачей по ссылкам структур (пользовательских типов) Наряду с функции, которые вы упомянули сами, должны составить довольно мощный язык для начала. Затем вы будете разрабатывать в соответствии с запросом пользователя.
источник
Есть несколько функций, которые можно добавить или расширить, если они уже существуют, но ...
... Базовые языки программирования очень похожи на языки сценариев, и функцией, которую многие пропустили или включили позже, было пространство имен или модули.
C, C ++, PHP, Visual Basic, запускались без модулей / пространств имен и были добавлены позже.
Следующими могут быть подпрограммы (процедуры или функции, которые не возвращают значение) и функции (подпрограммы, которые возвращают специальное значение).
источник
На сайте Stack Overflow есть хороший вопрос о ресурсах для понимания компиляторов. Вы также можете взглянуть на мою страницу класса Компиляторы .
Учитывая функции, которые вы уже создали, я предлагаю добавить три типа данных: int, string, boolean. Вам нужно будет сделать три вещи, каждая из которых немного сложнее предыдущей:
Если все пойдет хорошо, я предлагаю поработать над областью действия (локальной в подпрограммах и глобальной). Дайте мне знать, если вам нужен совет по этому поводу.
Удачи. И наслаждаться!
источник