Как определить грамматику (без контекста) для нового языка программирования (императивный язык программирования), который вы хотите создать с нуля.
Другими словами: как действовать, когда вы хотите создать новый язык программирования с нуля.
Как определить грамматику (без контекста) для нового языка программирования (императивный язык программирования), который вы хотите создать с нуля.
Другими словами: как действовать, когда вы хотите создать новый язык программирования с нуля.
Один шаг за раз.
Серьезно, начинайте с выражений и операторов, работайте вверх с инструкциями, затем с функциями/классами и т.д. Сохраните список того, для чего используется пунктуация.
Параллельно задайте синтаксис для обращения к переменным, массивам, хэшам, литералам чисел, строковым литералам, другим встроенным литералам. Также параллельно определите свою модель именования данных и правила определения области.
Чтобы проверить, имеет ли ваша грамматика смысл сосредоточиться на уровне (литерал/переменная, оператор, выражение, оператор, функция и т.д.) и убедитесь, что пунктуация и токены с других уровней, чередующихся или добавленных/добавленных, не вызовут двусмысленности.
Наконец напишите все это в EBNF и запустите его через ANTLR или подобное.
Также лучше не изобретать велосипед. Обычно я начинаю с выбора последовательностей для запуска и завершения блоков и функций оператора, а также математических операторов, которые, как правило, основаны на C-подобном, ECMAScript-like, Basic-like, на основе команд или на основе XML. Это очень помогает, потому что это то, с чем люди привыкли работать.
Конечно, вы должны придумать довольно убедительную причину не отказываться от написания нового языка и просто придерживаться C, ECMAScript или Basic, которые хорошо тестируются и используются много.
Я часто начинал определять новый язык только для того, чтобы найти кого-то еще, который уже реализовал функцию где-то на каком-то существующем языке.
Если ваша цель - скорость разработки для какого-то конкретного проекта, вам может быть лучше прототипировать что-то вроде Python, Lua или SpiderMonkey, если вы хотите быстро встать и работать, и хотите уменьшить объем ввода, необходимый в большинство скомпилированных языков.
Вы хотите посмотреть на EBNF (Extended Backus-Naur Form).
(Предположим, вы хотите написать контекстно-свободную грамматику, то есть.)
вам нужно купить эти две книги Шаблоны языковой реализации: создать свой собственный доменный и общий язык программирования (прагматические программисты) и Определяющая ссылка Antlr: создание доменных языков (Pragmatic Programmers) у них есть все, что вам действительно нужно, чтобы начать создавать свой собственный язык, парсер, переводчик, интерпретатор и/или компилятор
Если вы имеете в виду определение грамматики, вам лучше всего начать работу с существующего языка и изменить его грамматику, чтобы она соответствовала тому, что вам нужно. Создание спецификации грамматики - довольно механическое упражнение, используя набор шаблонов в вашей собственной голове. Например, как выглядит выражение 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 (*), и его нужно будет массировать для реализации, поскольку они неоднозначны.
Язык программирования Pragmatics от Michael Scott - хорошее введение в дизайн языков программирования. Он доступен на Amazon здесь
Посмотрите Bison, может быть, это то, что вы ищете?
Вам нужно будет много узнать о языках программирования, прежде чем приступать к его разработке. Я рекомендую Языки программирования: приложение и интерпретация Шрирама Кришнамурти.