Введение в разработку собственного языка и компилятора. Создаем на Rust! - страница 10

Шрифт
Интервал


. Но для нашего языка мы примем более простое решение: if будет принимать выражение и одну инструкцию для ветки then, а также опциональную инструкцию для ветки else, если она указана.

Пример синтаксиса:

if 1 == 1 then print 1 else print 0.

Оператор print уже был упомянут, и для него мы примем синтаксис, который принимает одно выражение.

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


Пример программы на созданном языке

a = 1 +2 * 3

if a == 6 then print 6 else print 0

Вот так будет выглядеть синтаксис, правильно?

1.2.2 Методы определения синтаксиса

Итак, как же нам определить синтаксис, о котором мы говорили до сих пор?

Для того чтобы программа могла быть разобрана компилятором, синтаксис должен быть определён достаточно строго, чтобы его можно было обработать компьютером. В этой книге мы будем использовать Extended Backus-Naur Form (расширенная форма Бэкуса-Наура), которая часто используется для определения синтаксиса собственных языков.


Введение в Extended Backus-Naur Form


Extended Backus-Naur Form (EBNF) – это метаязык для описания синтаксических правил, определённый в ISO/IEC 14977 [6]. В этой книге мы будем ссылаться на стандарт ISO/IEC 14977:1996