Основні характеристики основної мови? Пропозиції DSL?


9

Я нарешті почав розуміти складність створення інтерпретатора та компілятора. Я створив кілька версій TinyBasic, 1964 (Dartmouth) Basic, і власні розширення на цих мовах, перш ніж дійти до цього моменту. Найновіший проект - я називаю Open Source Basic ... тому що я не міг придумати жодних інших особливостей мови, які б зацікавили людей. Щоб мати можливість відкрити джерело мови та зрозуміти, як робляться деякі складні речі (як сканування, аналіз, інтерпретація та компілювання)

Open Source Basic спочатку інтерпретується мовою на основі стека. Ця мова на основі стека потім інтерпретується та виконується негайно або перетворюється на виконуваний CLR.

Усі мої запитання зводяться до цього:

  • Які основні особливості / конструкції мови на основі базових? У мене вже є такі основні конструкції: призначення, вирази, змінні, деякі функції (випадкові, ToUpper, ToLower), циклічні (для та час / поки / до), якщо (блокові та однорядкові) інші рішення, введення на основі консолі (введення ) та вихід (Друк) та підпрограми (поки немає параметрів).
  • Коли я закінчую, додаючи основні конструкції до своєї мови - як я повинен розгалужуватись? У який домен (и)? Іншими словами, які напрями (орієнтації) повинні виконувати мої основні мови з відкритим вихідним кодом, як тільки я зроблю всі загальні конструкції?

Спасибі за ваш час,

Домінік


3
Я завжди хотів, щоб лангаж мав вбудований, підтримуваний синтаксисом функціонал AOP.
FrustratedWithFormsDesigner

@Dominick: Як щодо функціональності LINQ?
Хижак

@Frustrated ... AOP - функціонально-орієнтоване функціонування програмування? Чи можете ви навести приклад?
Домінік

5
Вам не слід починати винаходити мову, що відповідає домену, з основних імперативних функцій. Спочатку формалізуйте свій домен, перетворіть ці знання на мову і лише потім додайте основні функції, якщо вони взагалі необхідні. Ймовірно, ви навіть отримаєте ідеальний DSL, який не є повним Тьюрінгом, і це одна з найкращих властивостей DSL.
SK-логіка

1
Безумовно, "goto" є обов'язковою ознакою будь-якої ОСНОВИ?
Перрі

Відповіді:


1

Мій досвід раннього BASIC на Commodore [Vic-20, C-64] створив мені враження, що номери ліній є основною "особливістю" BASIC. Схоже, вони більше не використовуються в сучасних реалізаціях, що для мене є шкодою, оскільки моє основне бачення BASIC є мовою навчання, з якої можна переходити на щось інше.


1

Безумовно, шляхетне починання, але я думаю, що у вас змінилися пріоритети.

Вашим першим занепокоєнням повинні стати проблеми "домену", на які спрямована ваша мова. Ось чому його називають в першу чергу "доменною мовою". DSL допустимий лише тоді, коли він невеликий, простий і дуже вузько зосереджений, щоб вирішити певний набір проблем, як ніж через масло.

Визначивши домен і як ваша мова буде працювати в домені, ви можете скласти конкретні конструкції або функції.

Нарешті, може бути корисним розглянути, чи потрібно внутрішній чи зовнішній DSL .


0

Я розробляв мову сценаріїв для програми CAE / FEA, і деякі функції, які мені здаються корисними для кінцевих користувачів, є: Локальні та глобальні змінні Матриці з динамічним функцією розподілу та розширення з аргументами та шляхом передачі посилань Структури (типи, визначені користувачем) Поряд з функції, які ви згадали про себе, повинні зробити для цього досить потужною мовою. Потім ви будете розвиватися відповідно до запиту користувача.


Це цікава та дуже доменна спеціальна мова (Computer Aided Engineering / Кінцевий аналіз елементів). Я бачу, для чого вам потрібні матриці. Усі ваші пропозиції є досить хорошими, і я буду пам'ятати про них. Дякую.
Домінік

0

Є кілька функцій, які можна додати або розширити, якщо вони вже є, але ...

... Основні мови програмування, дуже схожі на мови скриптів, і особливістю, яку багато хто пропустив або включив пізніше, було простір імен або модулі.

C, C ++, PHP, Visual Basic, запускається без модулів / просторів імен, і де додано пізніше.

Наступними можуть бути підпрограми (процедури або функції, які не повертають значення), і функції (підпрограми, які повертають спеціальне значення).


0

зрозуміти, як робляться деякі складні речі (як сканування, аналіз, інтерпретація та компілювання)

На сайті Stack Overflow є приємне запитання щодо ресурсів для розуміння компіляторів. Ви також можете подивитися на моїй сторінці класу Компілятори .

Коли я закінчую, додаючи основні конструкції до своєї мови - як я повинен розгалужуватись?

З огляду на вже створені функції, я пропоную додати три типи даних: int, string, boolean. Вам потрібно буде виконати три речі, кожна трохи складніше попередніх:

  1. Змініть граматику, щоб ви могли розбирати ці ключові слова. Тест.
  2. Створіть (або додайте до наявної) таблиці символів, щоб ви могли включати тип даних разом із ім'ям змінної та іншими властивостями. Потім зробіть перемикач налагодження, щоб ви могли перевірити це і переглянути таблицю символів.
  3. Перевірте сумісні типи перед генерацією коду до MsIL або під час інтерпретації. Тестуйте випадки помилок та помилок у кожному режимі виконання для всіх типів.

Якщо це піде добре, то я пропоную працювати над сферою застосування (локальна в підпрограмах проти глобальних). Дайте мені знати, чи хочете ви поради з цього питання.

Удачі. І насолоджуйтесь!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.