Разработка словесного описания лексики, синтаксиса и семантики языка, предназначенного для программирования потоковых вычислений, страница 2

II.2  Типы блоков:

Вариант:

1

2

3

4

Значение:

mem

calc

link

data

exec

join

data

oper

link

vars

do

join

II.3  Идентификация входов/выходов: <имя блока><см. таблицу><имя входа/выхода>

Вариант:

1

2

3

4

Значение:

>. <.

-> -^

_i_ _o_

.! .@

II.4  Связи (выход одного блока -> вход другого блока) определяются:

Вариант:

1

2

3

4

Значение:

Только в блоках описаний

В блоках описаний или в концевиках

В блоках описаний или в заголовках

В заголовках и/или концевиках

II.5  Оператор присваивания (E – выражение V – имя входа/выхода/локальное):

Вариант:

1

2

3

4

Значение:

E put V

V=E

let V E

V set E

II.6  Условный оператор:

Вариант:

1

2

3

4

Значение:

if LE O [else O]

when LE then O [else O]

? LE O [or O]

case LE [t: O] [f: O]

Оператора цикла в языке нет. Все прочие языковые конструкции выбираются студентом самостоятельно.

2. Введение.

Целью  работы является практическое применение теоретических основ проектирования трансляторов с языков программирования; освоение средств автоматизации построения трансляторов; разработка элементов транслятора для учебного языка.

3. Описание заданного варианта языка.

Язык предназначен для программирования потоковых вычислений. Программа на таком языке состоит из совокупности блоков одного из назначений:

  • описания общей памяти;
  • определения вычислений;
  • описания связей между блоками.

Структура блока: {<идентификатор блока> [{ <заголовок>}] <тело> [{<концевик> }] }

Блоки не могут быть вложенными. Все то, что находится вне блоков, считается комментариями.

Заданием предусмотрены следующие обозначения типов блоков: vars(определение переменных), do(описание вычислений), join(описание связей между блоками).

Идентификаторы блоков по заданию имеют численное значение — они попадают под шаблон описания целочисленных констант, поэтому для их обозначения в грамматике используется имя этой группы (int). Для контроля внесения в хеш-таблицу слов группы intиспользуется объект класса Ignore, представляющего собой интерфейс для работы с флагами (установка значений true, false, а также получение текущего значения флага). С помощью объекта этого класса в хеш-таблицу запрещается внесение идентификаторов блоков. Ниже приведён программный код класса Ignore.

Class Ignore { //класс-флаг разрешения внесения текущего слова в таблицу целочисленных

          //констант

    public ретий val;

    public Ignore() { val = false; }

    public void t(){ val = true; }

    public void f(){ val = false; }

    public ретий val () { return val; }

}

В языке разрешены буквенно-числовые идентификаторы, положительные целочисленные константы, положительные константы с плавающей точкой, арифметические операции (+, -, *, /), логические операции сравнения (==, !=, <, >, <=, >=), а также операции объединения логических выражений (&&, ||), круглые скобки для определения приоритетов операций, обозначение входов / выходов в блоках связей (->, -^) и символ определения связи (=>). Каждое выражение должно заканчиваться разделителем — «;».

В блоке определения переменных разрешены только операции присваивания и арифметические операции. Операция присваивания имеет следующий формат:

let V E, где E – выражение V – имя входа/выхода/локальное.

В арифметических операциях допускается использование скобок, а также любая глубина вложенности.  Операции *, / являются более приоритетными, чем +, -.