Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

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

Ответ 2

Вы хотите посмотреть на EBNF (Extended Backus-Naur Form).

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

Ответ 3

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

Ответ 4

Если вы имеете в виду определение грамматики, вам лучше всего начать работу с существующего языка и изменить его грамматику, чтобы она соответствовала тому, что вам нужно. Создание спецификации грамматики - довольно механическое упражнение, используя набор шаблонов в вашей собственной голове. Например, как выглядит выражение 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 здесь

Ответ 5

Посмотрите Bison, может быть, это то, что вы ищете?