Как определить грамматику (контекстно-свободную) для нового языка программирования (императивный язык программирования), который Вы хотите разработать с нуля.
Другими словами: Как Вы продолжаете двигаться, когда Вы хотите создать новый язык программирования с нуля.
Пошагово.
Нет, серьезно, начните с выражений и операторов, двигайтесь вверх к операторам, затем к функциям / классам и т. Д. Сохраните список того, какие знаки препинания используются для чего.
Параллельно определите синтаксис для обращения к переменным, массивам, хешам, числовым литералам, строковым литералам и другим встроенным литералам. Также параллельно определите свою модель именования данных и правила области действия.
Чтобы проверить, имеет ли ваша грамматика смысл, сфокусируйтесь на уровне (литерал / переменная, оператор, выражение, утверждение, функция и т. Д.) И убедитесь, что знаки препинания и символы с других уровней, вставленные или добавленные / добавленные в начале, не вызовут двусмысленности.
Наконец, запишите все это в EBNF и прогоните через ANTLR или подобное.
Также лучше не изобретать велосипед. Обычно я начинаю с выбора последовательностей для начала и окончания блоков операторов и функций, а также математических операторов, которые обычно в основном похожи на C, ECMAScript, Basic, на основе списка команд или на основе XML. Это очень помогает, потому что это то, с чем люди привыкли работать.
Конечно, вы должны придумать довольно вескую причину, чтобы не отказываться от написания нового языка и просто придерживаться C, ECMAScript или Basic, которые хорошо протестированы и широко используются.
Я часто начинал определять новый язык только для того, чтобы обнаружить, что кто-то уже реализовал функцию где-то на каком-то существующем языке.
Если ваша цель - скорость разработки какого-то конкретного проекта, вам может быть лучше создать прототип на чем-то вроде Python, Lua или SpiderMonkey, если вы хотите быстро приступить к работе и хотите сократить объем ввода, необходимый в большинство компилируемых языков.
Если вы имеете в виду определение грамматики, вам лучше всего будет начать с существующего языка и изменить его грамматику в соответствии с тем, что вам нужно. Создание спецификации грамматики - довольно механическое упражнение с использованием набора шаблонов в вашей собственной голове. Например, как выглядит оператор 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 здесь
Вы захотите взглянуть на EBNF (Расширенная форма Бэкуса-Наура).
(Если вы хотите написать контекстно-свободную грамматику, то есть.)
.вам нужно купить эти две книги Language Implementation Patterns: Create Your Own Domain-Specific and General Programming Languages (Pragmatic Programmers) и The Definitive Antlr Reference: Building Domain-Specific Languages (Pragmatic Programmers) в них есть все, что вам действительно нужно, чтобы начать создавать свой собственный язык, парсер, транслятор, интерпретатор или компилятор
.Прежде чем приступить к разработке языка программирования, вам нужно будет узнать о нем достаточно много. Я рекомендую Языки программирования: Application and Interpretation by Shriram Krishnamurthi.