Вариант: |
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 – условие, О – единственный оператор присваивания или единственный условный оператор или последовательность операторов, заключённая в фигурные скобки.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.