Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
30
Добавлен:
31.03.2015
Размер:
363.01 Кб
Скачать

2 Этап. Разбор второго правила. Раскрытие процедуры SimpExpr.

В этом правиле определение состоит из нерекурсивной и рекурсивной части. Разбор рекурсивной части представим как рекурсивную процедуру Scan, которая сканирует (просматривает) файл f символ за символом, проверяя правильность построения выражения. Раскроем процедуру Scan: С3

procedure Scan;

begin

read(f,ch);

{Проверка «+<буква>»}

if ch = '+' then

begin

read(f,ch);

if ch in [A,B] then

Scan

end

else

{Проверка «-<цифра>»}

if ch = '-' then

begin

read (f,ch);

if ch in [1..3] then

Scan

end

end

Раскроем процедуру SimpExpr: С2.1

.

procedure SimpExpr;

begin

read(f,ch);

{Проверка первого символа}

if ch in [A,B,1..3] then

Scan;

end

Раскроем процедуру обработки ошибок.

procedure Error (i:byte); С2.2

begin

case i of

1: writeln('Нет символа [');

2: writeln(' Ошибка в выражении')

end {case}

end

Упражнение.

Каждый из вариантов заданий содержит описание синтаксиса некоторого языка в Бэкус-Науровой Форме (БНФ). Разработать синтаксический анализатор языка, заданного этими синтаксическими правилами.

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

Анализируемые тексты вводятся посимвольно из текстового файла.

Правила и ограничения при использовании разделителей: пробелы, конечный символ и т.д. должны быть отражены в спецификации задачи.

В качестве функциональных тестов привести примеры правильных грамматических конструкций, а также примеры с ошибками, которые могут быть найдены анализатором.

Варианты заданий

1. <оператор присваивания>::=<буква>:=<строка>

<строка>::=<последовательность символов>

<последовательность символов>::=<символ>

<последовательность символов><символ>

2. <арифметический терм>::=<буква><цифра>

<арифметический терм><буква>

<арифметический терм>/<цифра>

  1. <логическое выражение>::=<буква>NOT<буква>

<логическое выражение>OR<буква>

4 . <описание константы>::=CONST<имя>=<значение>

<имя>::=<буква><имя><цифра>

<значение><::= -<цифра><значение><цифра>

5. <конструктор множества>::=[<список выражений>]

<список выражений>::=<выражение><список выражений>,<выражение>

<выражение>::=<буква><выражение>-<цифра>

  1. <интервальный тип>::=<константа>..<константа>

<константа>::=<имя><число>

<имя>::=<буква>

<число>::=< цифра><число><цифра>

  1. <логический терм>::=FALSE<буква> <логический терм> AND <буква>

  2. <указатель функции>::=<имя>(<выражение>)

<имя>::=<буква> <имя><буква><имя><цифра>

<выражение>::=<цифра><выражение>+<буква>

9. <отношение>::=<выражение>=<выражение>

<выражение>::=<имя><константа>

<имя>::=<буква>

<константа>::=<цифра><константа><цифра>

10. <вещественное число>::=<число>.<число>-<число>.<число>

<число>::=<цифра><число><цифра>

11. <логическое выражение>::=<буква>

<логическое выражение>OR<буква>

<логическое выражение>OR NOT<буква>

12. <оператор присваивания>::=<переменная>:=<выражение>

<переменная>::=<имя>

<выражение>::=<последовательность символ>

<имя>::=<буква><имя><буква>

<последовательность символов>::=<символ>

<последовательность символов><символ>

13. <арифметический терм>::=<множитель><множитель>

<множитель>::=<имя><константа>

<имя>::=<буква><имя><цифра>

<константа>::=<цифра><константа><цифра>

  1. <блок>::=BEGIN<оператор>END

<оператор>::=<оператор процедуры>

<оператор процедуры>::=<имя>(<список параметров>)

<список параметров>::=<имя><список параметров>,<имя>

<имя>::=<буква>

15. <запись>::=RECORD<список полей>END

<список полей>::=< поле><список полей>;<поле>

<поле>::=<имя>:<тип>

<тип>::=<имя>

<имя>::=<буква><имя><буква>

  1. <переменная с индексом>::=<буква>[<список индексов>]

<список индексов>::=<индекс>,<индекс>

<индекс>::=<имя>

<имя>::=<буква><имя><буква>

17. <вещественное число>::=<целое число><натуральное число>

<целое число>::=<натуральное число>-<натуральное число>

<натуральное число>::=<цифра><натуральное число><цифра>

  1. <логическое выражение>::=TRUE <логическое выражение>OR <буква>

<логическое выражение>AND<буква>

19. <заголовок>::=PROCEDURE<имя>(<список параметров>)

<список параметров>::=<параметр><список параметров>;<параметр>

<параметр>::=<имя> : <тип>

<тип>::=<имя>

<имя>::=<буква>

20. <отношение>::=<выражение>=<выражение>

<выражение>::=<имя><число>

<имя>::=<буква>

<число>::=<цифра>-<цифра><число><цифра>

21. <арифметическое выражение>::=<буква><цифра>-<цифра>

<арифметическое выражение>+<буква>

<арифметическое выражение>/<цифра>

22. <интервальный тип>::=<константа>..<константа>

<константа>::=<цифра>-<цифра><константа><цифра>

23. <описание типа>::=TYPE<имя>=<тип>

<тип>::=<имя>

<имя>::=<буква><имя><буква><имя><цифра>

24. <вещественное число>::=<целое число><целое число>

<целое число>::=<цифра>-<цифра><целое число><цифра>

25. <указатель функции>::=<имя>(<выражение>);

<имя>::=<буква><имя><цифра>

<выражение>::=<цифра><выражение>-<буква>

26. <литерное выражение>::=<переменная><литерное выражение>+<переменная>

<переменная>::=<имя>

<имя>::=<буква><имя><буква>имя><цифра>

27. <логический терм>::=<буква>TRUE<логический терм>AND<буква>

Соседние файлы в папке METOD2