Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТФЯГ задания.DOC
Скачиваний:
15
Добавлен:
16.03.2015
Размер:
195.07 Кб
Скачать

Лабораторная работа.

СИНТАКСИЧЕСКИЙ АНАЛИЗ АВТОМАТНЫХ ЯЗЫКОВ.

Вариант 1.

Написать программу синтаксического анализа автоматного языка условного оператора языка Turbo Pascal, имеющего вид:

IF <условие>THEN <оператор присваивания 1> [ ELSE <оператор присваивания 2>];

<условие>:: =<левая часть>[<условная операция><правая часть>]

<оператор присваивания>:: =<левая часть>: = <правая часть>

[ <идентификатор>]

<левая часть>:: =<идентификатор> 

[<целая константа>]

 <константа любая>

<правая часть>:: =

<идентификатор>[[<идентификатор>][<константа целая>]]

<константа любая>:: =<константа целая><число с фиксированной точкой>;

 = 

 <>

 <

<условная операция>:: = >

 <=

 >=

 in

<идентификатор>- идентификатор языкаTurbo Pascal, начинается с буквы или знака подчеркивания, за которым могут следовать буквы или цифры и знак подчеркивания, ввести ограничение на длину (не более 8 символов); не допускать использования зарезервированных слов (IF, THEN, ELSE, IN); пробелы и специальные символы не входят в идентификатор;

<константа целая>- целое число, возможно со знаком, в диапазоне -32768+32767;

Семантика:

Построить и вывести на печать по завершении анализа таблицы идентификаторов и констант.

Учесть перечисленные ограничения на идентификаторы и константы.

Сообщать об ошибках при анализе, указывая курсором место ошибки и ее содержание.

Примеры правильных цепочек:

IF A_B IN MN THEN C:=B;

IF E=3.14 THEN A1[5]:=ABC[I] ELSE A1[-1]:=0;

IF _E_1<=CD[18] THEN B12:=-0.081;

Вариант 2.

Написать программу синтаксического анализа автоматного языка операторов присваивания языка Turbo Pascal, имеющих вид:

[<метка>:]<левая часть>:=<правая часть>;

<метка>:: =<идентификатор><целое число без знака>

[ <идентификатор>]

<левая часть>:: =<идентификатор><идентификатор>

[<целая константа>]

 <левая часть> 

 <константа любая> 

<правая часть>:: =<левая часть><операция><правая часть> 

 <константа любая><операция><правая часть> 

 <константа любая><операция><константа любая> 

 <левая часть><операция><константа любая> 

 + 

 - 

<операция>:: = / 

 * 

 div 

  • mod 

<константа любая>:: =<константа целая><число с фиксированной точкой><число с плавающей точкой>.

<идентификатор>- идентификатор языкаPascal, начинается с буквы или подчеркивания, включает последовательность букв и цифр, не допускает пробелы и специальные знаки, ввести ограничение на длину идентификатора до 8 символов; не может быть зарезервированным словом(div, mod);

<константа целая>- целое число, возможно со знаком, из диапазона -32768+32767;

Семантика:

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

Учесть ограничения на идентификаторы и константы.

Сообщать об ошибках, указывая курсором место возникновения ошибки и содержание ошибки. Идентификатор метки не должен совпадать с идентификатором переменной и переменной-массивом.

Примеры правильных цепочек:

Met : A[I] := 355 + f;

10 : Peremen := i div j;

Al := B * 42.18;

M_16 := 45.8E-1 + i [-12];