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] |
Оператора цикла в языке нет. Все прочие языковые конструкции выбираются студентом самостоятельно.
Целью работы является практическое применение теоретических основ проектирования трансляторов с языков программирования; освоение средств автоматизации построения трансляторов; разработка элементов транслятора для учебного языка.
Язык предназначен для программирования потоковых вычислений. Программа на таком языке состоит из совокупности блоков одного из назначений:
Структура блока: {<идентификатор блока> [{ <заголовок>}] <тело> [{<концевик> }] }
Блоки не могут быть вложенными. Все то, что находится вне блоков, считается комментариями.
Заданием предусмотрены следующие обозначения типов блоков: 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 – имя входа/выхода/локальное.
В арифметических операциях допускается использование скобок, а также любая глубина вложенности. Операции *, / являются более приоритетными, чем +, -.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.