- •Задание
- •Символьный преобразователь
- •Входная грамматика
- •Функции переходов преобразователя
- •Лексический анализатор
- •Грамматика лексических единиц
- •Диаграмма состояний
- •Структуры данных и таблицы
- •Семантика анализа и символы действия.
- •3.5 Спецификация функций
- •3.6 Структура программы
- •Синтаксический анализатор
- •4.1 Неформальное описание семантики
- •4.2 Атрибутная грамматика
- •4.3 Описание символов действия
- •5. Атрибутный преобразователь
-
Семантика анализа и символы действия.
Семантика анализа заключается в проверке конструкций языка на допустимые значе-ния их длины, на правильность написания и т.д., но лексический анализатор не торажает правила построения выходных величин. Введем некоторые ограничения на наши конструк-ции языка и сразу определим для семантических действий ряд процедур.
1. Идентификатор.
Идентификатор должен начинаться с буквы и не иметь длину больше 10 символов.
Символы действия:
1. НИ (начало идентификатора)
Очистка буффера,установка счетчика длины в 1.
2. ФИ (формирование идентификатора)
Чтение очередного символа, проверка является ли он буквой или цифрой,
если нет, то в идентификаторе написан неверный символ.
3. КИ (конец идентификатора)
Проверка счетчика длины на допустимое значение, если превышает, то
ошибка в идентификаторе, если нет, то ищем идентификатор в таблице
идентификаторов, если его нет, то добавляем его туда, добавляем лексему
типа 1, с длиной идентификатора. Указатель лексекмы ставим на ячейку
таблицы идентификаторов, где находится идентификатор.
2. Число
Число не должено быть меньше 0 и больше 216.
Символы действия:
1. НЧ (начало числа)
Очистка буффера, установка счетчика длины в 1.
2. ФЧ (формирование числа)
Чтение очередного символа, увеличение счетчика на 1, проверка является
ли он цифрой, если нет, то в числе написан неверный символ.
3. КЧ (конец числа)
Проверка значения числа на допустимое значение, если не удовлетворяет,
то ошибка в числе, если удовлетворяет, то ищем число в таблице чисел
если его нет, то добавляем его туда, добавляем лексему типа 2, с длиной
числа. Указатель лексекмы ставим на ячейку таблицы чисел, где находится
число.
3. Служебное слово
Служебное слово должно быть точно описано в соответствии с языком.
Символы действия:
1. НСс (начало служ.слова)
Очистка буффера, установка счетчика длины в 1.
2. ФСс (формирование служ.слова)
Чтение очередного символа, увеличение счетчика на 1.
3. КСс (конец служ.слова)
Проверка на допустимость служебного слова,если допустимо, то добавля-
ем лексему типа 3, с длиной служ.слова. Указатель лексекмы ставим на
ячейку таблицы служ.слов, где находится служ.слово.
4. Константы (обоих типов)
Константы должны быть точно описаны в соответствии с языком.
Символы действия:
1. НК (начало константы)
Очистка буффера, установка счетчика длины в 1.
2. ФК (формирование константы)
Чтение очередного символа, увеличение счетчика на 1.
3. КК (конец константы)
Проверка на допустимость константы, если допустима, то добавляем лек-
сему типа 5(если костанта bool), типа 6(если константа char), с длиной кон-
станты. Указатель лексекмы ставим на ячейку соответствующей таблицы
констант где находится константа.
5. Разделители
Разделители должны быть точно описаны в соответствии с языком.
Символ действия:
1. ФК (формирование разделителя)
Проверка на допустимость разделителя, если допустим, то добавляем лек-
сему типа 4 с длиной константы. Указатель лексекмы ставим на ячейку
соответствующей таблицы разделителей где находится разделитель.
6. Ошибка
Символ действия:
1. НО (начало ошибки)
Вывод информации об ошибке