Как определить грамматику для языка программирования

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

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

24
задан Book Of Zeus 1 October 2011 в 21:30
поделиться

6 ответов

Пошагово.

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

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

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

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

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

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

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

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

26
ответ дан 28 November 2019 в 23:28
поделиться

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

if <- if (exp) block

if <- if (exp) block else block2

или как ML?

if <- if exp then block else block end

или, может быть, вы захотите использовать elseif, например Lua:

if <- if exp then exp end

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

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

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

2
ответ дан 28 November 2019 в 23:28
поделиться

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

1
ответ дан 28 November 2019 в 23:28
поделиться

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

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

.
9
ответ дан 28 November 2019 в 23:28
поделиться

вам нужно купить эти две книги Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages (Pragmatic Programmers) и The Definitive Antlr Reference: Building Domain-Specific Languages (Pragmatic Programmers) в них есть все, что вам действительно нужно, чтобы начать создавать свой собственный язык, парсер, транслятор, интерпретатор или компилятор

.
5
ответ дан 28 November 2019 в 23:28
поделиться

Прежде чем приступить к разработке языка программирования, вам нужно будет узнать о нем достаточно много. Я рекомендую Языки программирования: Application and Interpretation by Shriram Krishnamurthi.

1
ответ дан 28 November 2019 в 23:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: