Разработка языка, предназначенного для программирования потоковых вычислений, страница 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]

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


Введение

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


Описание языка

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

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

Число блоков каждого типа не ограничено. Всё, что находится между блоков, считается комментариями.

Блок имеет следующую структуру:

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

            Идентификатор блока имеет следующую структуру:

<имя блока>:<тип блока>;

Имя блока буквенно-числовое.

            Типом блока может быть vars, do, join.

Блок типа vars – блок описания общей памяти. В нём разрешается задавать глобальным переменным только константные значения. Он не содержит заголовка.

Блок типа join – блок описания связей между блоками. В нём разрешается описывать связи между блоками определения вычислений, а также подавать значения глобальных переменных на входы блоков вычислений. Он не содержит заголовка.

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

            В заголовках и блоках описания связей происходит передача значения выходов одних блоков на входы других блоков. Идентификация входов осуществляется с помощью оператора _i_, а выходов с помощью оператора _o_. Для передачи используется выбранный мною дополнительный оператор языка ->. Он имеет следующую структуру:

<имя блока> _o_ <имя выхода> -> <имя блока> _i_ <имя входа>[,<имя блока> _i_ <имя входа>[…]];

Троеточие означает возможность повторения содержания скобок нуль или более раз.

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

let V E, где V - имя входа/выхода или локальная переменная, E - выражение или еще  один оператор присваивания при многократном присваивании.

В качестве условного оператора используется оператор if. Он имеет следующий формат:

if LE O [else O], где LE – условие, О – единственный оператор присваивания или единственный условный оператор или последовательность операторов, заключённая в фигурные скобки.