Программа на входном языке СУПЕР («метапрограмма») состоит из следующих разделов:
- Заголовок;
- Раздел констант;
- Раздел типов;
- Алфавит;
- Раздел файлов;
- Раздел библиотеки;
- Атрибутная схема.
Заголовок определяет имя атрибутной грамматики, первые три буквы имени задают расширение имени входного
файла для реализуемого транслятора.
Раздел констант содержит описание констант, раздел типов - описание типов.
Алфавит содержит перечисление нетерминальных символов и классов лексем, а также атрибутов (и их типов), сопоставленных этим символам. Классы лексем являются терминальными символами с точки зрения синтаксического анализа, но могут иметь атрибуты, вычисляемые в процессе лексического анализа. Определение класса лексем состоит в задании
имени класса, имен атрибутов для этого класса и типов этих атрибутов.
В разделе определения нетерминальных символов содержится перечисление этих символов с указанием приписанных им атрибутов и их типов. Аксиома грамматики указывается первым символом в списке нетерминалов.
Раздел библиотеки содержит заголовки процедур и функций, используемых в формулах атрибутной грамматики.
Раздел файлов содержит описание файловых переменных, используемых в формулах атрибутной грамматики.
Файловые переменные можно рассматривать как атрибуты аксиомы.
Атрибутная схема состоит из списка синтаксических правил и сопоставленных им семантических правил. Для описания синтаксиса языка используется расширенная форма Бэкуса-Наура. Терминальные символы в правой части заключаются в кавычки, классы лексем и нетерминалы задаются их именами. Для задания в правой части необязательных символов используются скобки [ ], для задания повторяющихся конструкций используются скобки
( ). В этом случае может быть указан разделитель символов (после /). Например,
| A ::= B [ C ] ( D ) ( E / ',' ) |
Первым правилом в атрибутной схеме должно быть правило для аксиомы.
|
D ::= 'd' => $0.y:=$0.x+1. A ::= B (C) [D] => $2.x:=1; 2M: $2.x:=$2.x+1; $3.x:=$2.x; 3E: $3.y:=$3.x; 3: writeln($3.y). |