- •2006 Оглавление:
- •1. Постановка задачи
- •Исходные данные:
- •2. Описание входного языка:
- •2.1. Описание синтаксиса входного языка
- •2.2. Описание семантики входного языка
- •Объявления и области действия
- •Оператор вывода
- •Оператор ввода
- •Зарезервированные функции
- •3. Описание этапа лексического анализа
- •3.1. Определение типов лексем
- •3.2. Определение синтаксиса лексем
- •3.3. Структуры данных
- •50 Таблица констант
- •3.5. Результаты работы лексического анализатора
- •4. Описание этапа синтаксического анализа:
- •4.1. Построение кс-грамматики входного языка
- •4.1.1. Определение программы
- •4.1.6. Подграмматика арифметических операций
- •4.2. Описание промежуточного языка (триады)
3.2. Определение синтаксиса лексем
Определение автоматных грамматик, описывающих синтаксис лексем.
3. 2. 1. Классы литер, с помощью которых записываются программы на входном языке:
класс «буква»: a A … z Z _ $
класс «ноль»: 0
класс «цифра без нуля»: 1 2 3 4 5 6 7 8 9
класс «однолитерные разделители»: ; , + - * / ( ) [ ] ? : . ^
класс «литеры однолитерных и двулитерных разделителей»: < > = ! & |
3. 2. 2. Составление автоматных грамматик, описывающих синтаксис лексем:
Терминальными символами грамматики являются классы литер, а начальным символом грамматики – символ S.
Автоматная грамматика, описывающая синтаксис лексем «идентификатор» и «ключевое слово». Здесь “Буква” – класс «буква», “Цифра” – класс «цифра», “1” – класс, включающий все литеры, за исключением букв и цифр.
Правила грамматики:
S |
|
Буква Id |
Id |
|
Буква Id |
Id |
|
Цифра Id |
Id |
|
1 |
Автоматная грамматика, описывающая синтаксис лексемы «целая константа без знака». Здесь “Цифра” – класс «цифра без нуля» , “2” – класс, включающий все литеры, за исключением цифр , “Ноль” – класс «ноль»
Правила грамматики:
S |
|
Sign Ноль |
S |
|
Sign Цифра C |
Sign |
|
+ |
Sign |
|
- |
Sign |
|
2 |
C |
|
Цифра C |
C |
|
Ноль C |
C |
|
2 |
Автоматная грамматика, описывающая синтаксис лексемы «вещественная константа без знака». Здесь “2” – класс, включающий все литеры, за исключением цифр.
Правила грамматики:
S |
|
Sign Ноль |
S |
|
Sign Ноль . T |
S |
|
Sign Цифра C |
Sign |
|
+ |
Sign |
|
- |
Sign |
|
2 |
C |
|
Цифра C |
C |
|
. T |
T |
|
Цифра T |
T |
|
Ноль T |
T |
|
2 |
Автоматные грамматики, описывающие синтаксис лексем «однолитерный разделитель» и «двулитерный разделитель». Здесь “Знак” – классы «однолитерные разделители» и «литеры однолитерных и двулитерных разделителей», “3” – класс, включающий все литеры.
Правила грамматики:
однолитерные разделители:
|
S |
|
Знак L |
L |
|
3 |
лексема «<=» |
S |
|
< Next | |||||||
|
Next |
|
= E | |||||||
|
E |
|
3 | |||||||
|
|
|
|
| ||||||
|
|
|
| |||||||
|
|
|
|
лексема «>=» |
S |
|
> Next |
|
Next |
|
= E |
|
E |
|
3 |
лексема «! =» |
S |
|
Next = |
|
Next |
|
! E |
|
E |
|
3 |
лексема «&&» |
S |
|
& Next |
|
Next |
|
& E |
|
E |
|
3 |
лексема «||» |
S |
|
| Next |
|
Next |
|
| E |
|
E |
|
3 |