Питання про створення мови сценаріїв


12

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

Я маю на увазі, чи є стандартні документи, які описують нову мову програмування / сценаріїв, про яку йдеться?


оскільки це стосується програмування, а не програмістів, це, мабуть, краще підходить для StackOverflow.
Muad'Dib

14
Я не згоден з Muad'Dib. Я думаю, що це добре місце для цього питання.
Кріс

5
Я думаю, що замість того, щоб вигадувати власну мову сценаріїв, ціною величезної кількості роботи, щоб ви та ваш користувач мали вивчити нову мову, вам краще вбудувати існуючу мову сценаріїв. Деякі мови, наприклад, Python, Javascript / ECMAScript, розроблені таким чином, що вони можуть бути вбудовані в більші рамки. Коротше кажучи, вам потрібно буде лише розробити API і придумати спосіб вбудовування інтерпретатора скриптів у власну програму.
Лі Лі Райан

1
У цьому є перевага, якщо мова має бути DSL. для загальної мови не так багато. Звичайно, деякі загальні мови є дуже хорошою базою для DSL, наприклад, Lisp або TCL
jk.

Відповіді:


16

Те, що вам потрібно написати, називається мовною специфікацією .

Він повинен містити опис граматики мови (бажано у розширеній формі Backus-Naur-Form ) та її семантики.

Для останньої частини ви можете написати опис власними словами (але будьте уважні) або формальну семантику .


1
BNF корисний лише для граматик без вмісту, мови сценаріїв не завжди є вільними від контексту, наприклад, TCL (хоча, я думаю, ви все ще можете стверджувати, що в більшості випадків бажано мати мову, вільну від контексту)
jk.

@jk. Я б не сказав, що BNF повністю марний для безконтекстних мов. Залежно від того, наскільки синтаксис є безконтекстним, все одно має сенс вказати його в EBNF, а потім вирішити двозначності словами. Ось, що, наприклад, робить стандарт C ++. У більшості випадків я думаю, що це все зрозуміліше, ніж пояснювати все словами або конкретизувати це за допомогою граматики, залежної від контексту або необмеженої граматики.
sepp2k

правда, я більше зауважую, що існують такі мови, як lisp, tcl або вперед (які насправді дуже хороші для визначення DSL), які мають вироджені синтаксиси, і тому BNF говорить вам дуже мало
jk.

@jk. Звичайно, але в цьому випадку будь-який інший спосіб опису синтаксису скаже вам однаково мало, просто тому, що так мало сказати. Це просто означає, що частина синтаксису специфікації буде дуже короткою.
sepp2k

13

Вам знадобляться наступні:

  • Причина для створення нової мови
  • Філософія
  • Семантичне визначення
  • Лексичний опис ваших лексем
  • Визначення аналізу синтаксису

Чим відрізнятиметься ваша мова? Яка його місія? Це функціонально? Чи орієнтований на об'єкт? Це мета-мова? Які його унікальні особливості? Що це дасть світу, який не існує (або існує потворно)? Як ти хочеш змінити речі? Він складений чи інтерпретований? DSL або мова загального призначення? Це ваша філософія і багато диктує дизайн вашого мови.

Далі попрацюйте над викреслення грубого синтаксису та семантики на папері. Це буде ваше семантичне визначення ... написання підробленого коду - чудовий спосіб розвинути свої думки. Прочитайте "Мова програмування на С", щоб отримати відмінний приклад того, як це робиться. Пограйте з ним.

Потім вам потрібно буде певним чином визначити свої лексеми та синтаксис. Потім програми обробляють їх в автомати, здатні читати в рядках і обробляти синтаксис. Yacc і Bison використовують регулярні вирази та синтаксис стилю BNF для лексичного та синтаксичного аналізу відповідно. Також є інструменти, подібні до Yacc та Bison, для інших мов.

Вам також знадобиться обґрунтування мовної теорії / укладачів, щоб знати, що НЕ робити. Приклади включають неоднозначні граматики, проблеми з генерацією AST та маніпуляцій та загалом, як зробити життя простим для себе. Знання теорії є дуже важливим. Я б подумав, щоб почати наступне:

Компілятори: принципи, методи та інструменти (Книга драконів)
Впровадження сучасних компіляторів у програмі C або сучасна компіляція на Java


1
+1 для філософії, для DSL ви чітко хочете ідентифікувати тут домен
jk.

8

99,9% часу створення нової мови абсолютно непотрібне. Прибутковість інвестицій, швидше за все, була б крихітною, і ви б просто витратили свій час.

Швидше за все, ви можете використовувати Javascript як сприйнятливу мову сценаріїв, а для більшості мов вже є парсери. Ви також можете використовувати інші мови, які вам подобаються, якщо ви знайдете для них відповідний аналізатор. Реалізація цих програм у вашій програмі вимагатиме набагато менше роботи та приносить більший прибуток. Люди не повинні вивчати іншу мову, вони просто повинні вивчити ваш API. Це набагато краще рішення.

Створення нової мови майже завжди погано.


9
За винятком багатьох разів, коли це непогано. Створення власних простих DSL може бути дуже корисним. Тепер створення вашої власної мови загального призначення буде більш узгоджується з тим, що говорить ваша відповідь.
ChaosPandion

@ChaosPandion, але багато мов уже чудово створюють DSL, який використовує код з цієї мови (тобто рубін в цьому хороший)
альтернатива

2
Я згоден з вашою відповіддю, але я вважаю, що це не правильна відповідь на це питання. Я вважаю, що запитуючий дивиться на загальні риси створення мови сценаріїв, а не на плюси та мінуси їх створення.
Тім Мерфі

Створення нової мови майже завжди є найкращим рішенням. en.wikipedia.org/wiki/Language-oriented_programming
SK-logic

3

Ви можете описати граматику своєї мови в BNF .

Наприклад, це граматика Пітона .


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

0

якщо ви використовуєте .NET, ось щось я натрапив на деякий час назад. Я лише кинув це цікавим поглядом, але, можливо, це вам буде корисно : іронія .

Irony - це набір розробок для реалізації мов на платформі .NET.

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