Разработка системного программного обеспечения
Информация - Компьютеры, программирование
Другие материалы по предмету Компьютеры, программирование
символ
P - множество правил вывода
Для языка G имеем следующие множества:
Vt ={ 0, 1, 2, ... , 9 ; a, b, c, d, ... ,z ; A, B, C, ..., Z; , = };
Vn ={Оператор, УслВыр, Терм, Операнд, Функция, Идентификатор, Скобки, Целое };
Z = { Оператор };
P = {
- ]
- T | T = T
- Идентификатор | ЦБЗ
- );
- |
- Идентификатор | ЦБЗ |
- Б { Б | Ц }
}
Классификация G[Z]
- ]
- T | T = T
- Идентификатор | ЦБЗ
- );
- |
- Идентификатор | ЦБЗ |
- Б { Б | ЦБЗ }
Сделаем замену нетерминальных символов:
Z
A
B
C
D
E
F
Сделаем замену терминальных символов:
IF a
( b
) c
; d
ELSE e
ЦБЗ f
Б g
h
- Z abAcC [ eC ]
- A B | B B | B = B
- B F | f
- C FbDcd
- D E | h
- E F | f | h
- F g { g | f }
Вывод : G[Z] - автоматная грамматика.
Выбор метода анализа
Ссылаясь на однозначность выбранной грамматики, принимая во внимание хорошо разработанные системы анализа выбираем метод рекурсивного спуска как базовый метод языкового процессора.
Диагностика и нейтрализация ошибок
Разработанный алгоритм относится к общеизвестному методу синтаксического разбора, предложенный Айресом.
Основная идея метода состоит в том, что по контексту без возврата отбрасываюся те символы, которые привели в тупиковую ситуацию и разбор продолжается.
Для наглядности изобразим куст синтаксического разбора для входного языка:
Дано:
IF ( A < Bc ) BULL () ;
- Z abAcC [ eC ]
- A B | B B | B = B
- B F | f
- C FbDcd
- D E | h
- E F | f | h
- F g { g | f }
Z
a b A c C
B B Fb c d
F F g { g }
g g {g} g g g g
IF ( A < Bc ) BULL ( ) ;
Тестирование на цепочках
Протестируем данную программу на следующей языковой цепочке:
IF ( A < B ) BULL ( );
a b
b c d
g { g }
g g {g} g g g g
IF ( A < B ) BULL ( ) ;
- Проверка на нетерминальный символ IF
- Проверка на терминальный символ (
- Проверка на условное выражение
- Проверка на терм
- Проверка на знак
- Проверка на терм
- Проверка на терминальный символ )
- Проверка на функцию
- Проверка на имя функции
- Проверка на наличие терминального символа (
- Проверка на параметр функции (может и отсутствовать)
- Проверка на наличие терминального символа )
6. Проверка на терминальный символ ;
Вывод: ошибок не обнаружено