Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Компиляторы_2.docx
Скачиваний:
2
Добавлен:
10.07.2019
Размер:
34.13 Кб
Скачать

1) Лексический анализ

Обычно языки программирования конструируются таким образом чтобы лексемы всех синтаксических классов описывались только автоматными грамматиками. Перечисление есть простейший случай автоматной грамматики.

Формы представления грамматик.

а) Граф состояний десятичных чисел

  1. <дес. число> ::= <дес. число> <цифра>| <смеш. число><цифра>

  2. <смеш. число> :: = <знак><целое><дес. точка> | <целое><дес. точка>

  3. <целое> ::=<целое><цифра> | <цифра>

  4. <знак>::= +| -

  5. <цифра> ::= 1 | 2 | ..| 9| 0

  6. <точка> ::= .

Алгоритм построения графа:

а) Количество состояний раво количеству нетерминальных символов

б) Правое состояние текущий символ, а левая часть следующее состояние.

б) Матричное или табличное представление анализатора

Знак

Цифра

Дес число

Прочее

  1. Старт

2 P1

3 P2

Д1

Д1

  1. Знак

Д2

3 Р2

Д3

Д3

  1. Целое

Д4

3 Р2

4

Д5

  1. Смеш.

Д4

3 Р2

Д7

Д6

  1. Дес

Д6

5 Р3

ВЫХОД

Оснастим наш лексический анализатор семантическими программами назначение которых вычислить арифметические значения числа.

Семантические программы:

Ч – значение числа

Зн – значение знака числа

цф – значение цифры из входной последовательности

зн – значение знака из входной последовательности

д – делитель

Таблица программ

Инициализация

Ч := 0 Зн:= + Д:= 1.0

Р1

Зн := зн

Р2

Ч := Ч * 10.0 + цф

Р3

Д := Д * 10.0; Ч = Ч + цф/Д

Таблица диагностических сообщений

Д1

не десятичное число, т.к. не начинается со знака или цифры

Д2

Ошибка: два знака подряд

Д3

Не десятичное число так как за знаком не следует цифра

Д4

Недесятичное, но целое число

Д5

Не десятичное, так как за целой частью не следует точка

Д6

Ошибка: за дес. не следует цифра

Д7

Ошибка: две точки в одном числе