- •2011Г. Содержание:
- •Спецификация Разработка:
- •Описание входных данных:
- •Описание выходных данных:
- •Примеры входных и выходных данных:
- •Проектирование
- •Проектирование модульной структуры
- •Пример набора тестов для модулей распознавания цепочки:
- •3. Кодирование
- •3.1. Блок транслитерации
- •Транслитерация символьной цепочки:
- •3.2 Лексический блок
- •If b then X(f1, f2, f3) else d(e1, e2);
- •Конечный распознаватель лексического блока:
- •Редукция конечного распознавателя лексического блока:
- •Примитивные процедуры обрабатывающего автомата
- •Процедуры переходов обрабатывающего автомата лексического блока
- •3.3 Синтаксический блок
- •Тестирование
- •Пример протокола тестирования головного модуля
3. Кодирование
3.1. Блок транслитерации
Блок транслитерации реализован в виде детерминированного конечного автомата ,который выполняет обработку и распознавание входной символьной цепочки. Обработка входной цепочки заключается в собственно выполнении транслитерации – формировании цепочки лексем вида ("символ цепочки", "класс символа цепочки"). Распознавание входной цепочки означает, что данный автомат должен отвергать все символьные цепочки, содержащие символы, которые заведомо не удовлетворяют формулам Бэкуса–Наура из условия задачи (например, буквы кириллицы, символы @, # и др.).
Транслитерация символьной цепочки:
Символ |
Класс |
a..z, A..Z 0..9 , ;
( ) |
Буква Цифра Запятая Тчкзпт Пробел Откр. скобка Закр. скобка |
другие |
ошибка |
3.2 Лексический блок
Лексический блок реализован в виде детерминированного конечного автомата, который выполняет обработку и распознавание входной цепочки лексем (полученной как результат работы блока транслитерации). Обработка входной цепочки заключается в формировании цепочки лексем вида ("символ входного языка", "класс символа входного языка"). Распознавание входной цепочки означает, что данный автомат должен отвергать все цепочки лексем, содержащие лексемы, которые заведомо не удовлетворяют
формулам Бэкуса–Наура из условия задачи (например, два знака числа подряд, знак числа после десятичной точки и др.).
Построение конечного автомата лексического блока необходимо выполнить следующим образом. Сначала, используя метод разметки символов, нужно построить конечный распознаватель входной цепочки лексем: определить список состояний (название/номер и семантика состояния), выделить в данном списке начальное состояние и допускающие состояния и указать функцию переходов.
If b then X(f1, f2, f3) else d(e1, e2);
№ п/п |
Состояние |
Семантика |
1 |
НАЧ |
Момент до начала обработки цепочки либо чтение пробелов в начале строки |
2 |
КЛСЛОВО1 |
Чтение ключевого слова if |
3 |
ПРОБЕЛ 1 |
Чтение пробелов, находящихся между ключевым словом if и именем |
4 |
ИМЯ1 |
Чтение имени |
5 |
ПРОБЕЛ 2 |
Чтение пробелов, находящихся между именем и ключевым словом |
6 |
КЛСЛОВО2 |
Чтение ключевого слова then |
7 |
ПРОБЕЛ 3 |
Чтение пробелов, находящихся между ключевым словом then и именем |
8 |
ИМЯ2 |
Чтение имени |
9 |
ПРОБЕЛ 4 |
Чтение пробелов, находящихся между именем и скобкой |
10 |
СКОБКА1.1 |
Чтение скобки открывающей список параметров |
11 |
ИМЯ2.1 |
Чтение имени 1 параметра |
12 |
ЗАПЯТАЯ |
Чтение запятой |
13 |
ИМЯ2.2 |
Чтение имени 2 параметра |
14 |
ЗАПЯТАЯ |
Чтение запятой |
15 |
ИМЯ2.3 |
Чтение имени 3 параметра |
16 |
СКОБКА1.2 |
Чтение скобки закрывающей список параметров |
17 |
ПРОБЕЛ 5 |
Чтение пробелов между скобкой и ключевым словом |
18 |
КЛСЛОВО 3 |
Чтение ключевого слова else |
19 |
ПРОБЕЛ 6 |
Чтение пробелов, находящихся между ключевым словом и именем |
20 |
ИМЯ 3 |
Чтение имени |
21 |
ПРОБЕЛ 7 |
Чтение пробелов, находящихся между именем и скобкой |
22 |
СКОБКА 2.1 |
Чтение скобки открывающей список параметров |
23 |
ИМЯ2.1 |
Чтение имени 1 параметра |
24 |
ЗАПЯТАЯ |
Чтение запятой |
25 |
ИМЯ2.2 |
Чтение имени 2 параметра |
26 |
СКОБКА 2.2 |
Чтение скобки открывающей список параметров |
27 |
ТЧКЗПТ |
Чтение точки с запятой |