Как определить грамматику для языка программирования - PullRequest
24 голосов
/ 23 февраля 2010

Как определить грамматику (без контекста) для нового языка программирования (императивный язык программирования), который вы хотите создать с нуля.

Другими словами: как действовать, если вы хотите создать новый язык программирования с нуля.

Ответы [ 6 ]

26 голосов
/ 23 февраля 2010

Один шаг за раз.

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

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

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

Наконец, запишите все это в EBNF и запустите через ANTLR или аналогичный.

Также лучше не изобретать велосипед. Обычно я начинаю с выбора последовательностей для начала и окончания блоков и функций операторов и математических операторов, которые обычно являются в основном C-подобными, ECMAScript-подобными, Basic-подобными, основанными на списке команд или основанными на XML. Это очень помогает, потому что это то, с чем люди привыкли работать.

Конечно, вы должны придумать довольно вескую причину, чтобы не отказываться от написания нового языка и просто придерживаться C, ECMAScript или Basic, которые хорошо протестированы и широко используются.

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

Если ваша цель - скорость разработки для какого-либо конкретного проекта, вам лучше использовать прототипы в Python, Lua или SpiderMonkey, если вы хотите быстро начать работу и хотите сократить количество набираемых текстов, необходимое для большинство скомпилированных языков.

9 голосов
/ 23 февраля 2010

Вам захочется взглянуть на EBNF ( Расширенная форма Бэкуса-Наура ).

(Предполагается, что вы хотите написать контекстно-свободную грамматику, то есть.)

5 голосов
/ 23 февраля 2010

вам нужно купить эти две книги Шаблоны языковой реализации: создайте свои собственные доменные и общие языки программирования (прагматические программисты) и Подробный справочник Antlr: создание доменных языков (прагматический Программисты) у них есть все, что вам действительно нужно, чтобы начать создавать свой собственный язык, парсер, переводчик, интерпретатор и / или компилятор

2 голосов
/ 23 февраля 2010

Если вы имеете в виду определение грамматики, вам лучше всего начать с существующего языка и изменить его грамматику в соответствии с тем, что вам нужно. Создание спецификации грамматики - довольно механическое упражнение, использующее набор шаблонов в вашей голове. Например, как выглядит выражение if? Это выглядит как C

if <- if(exp) block

if <- if(exp) block else block2

или как ML?

if <- if exp then block else block end

или, может быть, вы хотите использовать elseifs, такие как Lua:

if <- if exp then exp end

if <- if exp then exp (elseif exp)* else exp end

Грамматика и семантика кодифицируют эти решения. Обратите внимание, что ни один из них еще не вполне подходит для реализации в генераторе компилятора LALR или LL (*), и его нужно будет массировать для реализации, поскольку они неоднозначны.

Прагматика языка программирования Майкла Скотта - хорошее введение в проектирование языков программирования. Это доступно на Амазонке здесь

1 голос
/ 23 февраля 2010

Прежде чем приступить к разработке, вам нужно будет много знать о языках программирования. Я рекомендую Языки программирования: применение и интерпретация Шрирам Кришнамурти .

1 голос
/ 23 февраля 2010

Взгляните на Зубр , может, это то, что вы ищете?

...