Термінова допомога студентам
Дипломи, курсові, реферати, контрольні...

Побудова формальної мови L

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Найден While перевірка почалося з символу — і Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — і Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — 0 Перевірка на ЦБЗ, поточний символ — 0 Перевірка на FUNC, поточний символ — Перевірка на IDENT, поточний символ — c. Найден While перевірка почалося з символу — (Перевірка… Читати ще >

Побудова формальної мови L (реферат, курсова, диплом, контрольна)

Побудова формального мови L.

WHILE () [];

WHILE — вхідний термінальний символ.

— умовне выражение.

— деяка функція, яка може отсутствовать.

— параметри функції, які можуть отсутствовать Пример правильного синтаксиса:

WHILE (A>4444 T| = T | ≠ T 3. (O | T*O | T**O | T+O | T-O | T/O 4. (() | | 5. (Б{Б|Ц} 6. (Ц{Ц} 7. (([{,}]) 8. (| | (.

Класифікація G[Z].

G[]: 1. (while () []; 2. (T| < T| > T| = T | ≠ T 3. (O | T*O | T**O | T+O | T-O | T/O 4. (() | | 5. (Б{Б|Ц} 6. (Ц{Ц} 7. (([{,}]) 8. (| | (.

Сделаем заміну нетермінальних символів: (Z.

(A.

(B.

(З (D.

(E.

(F.

(G Зробимо заміну термінальних символів: WHILE (a ((b) (з; (d Ц (f Б (g, (h.

G[Z]: 1. Z (abAc[D]d 2. A (B|A B|A = B |A ≠ B 3. B (З | B*C | B**C | B+C | B-C | B/C 4. З (bAc | E | F 5. E (g{g|f} 6. F (f{f} 7. D (Eb[G{hG}]c 8. G (E | F | (Висновок: G[Z] - контекстно-свободная грамматика.

Вибір методу анализа.

Хоча однозначність у випадку для контекстно-зависимых граматик не доведено, її використання можливо для граматик у яких однозначність очевидна. Найбільш розробленим методом аналізу, для такого типу граматик є, метод рекурсивного спуска.

Діагностика й нейтралізація ошибок.

Розроблений алгоритм належить до загальновідомого методу синтаксичного розбору, запропонований Айронсом.

Основна ідея методу у тому, що у контексту без повернення відкидаються символів, що призвели в глухому куті і розбір продолжается.

Наведемо приклад синтаксичного разбора:

While (A >) cls (); 1. Z (abAc[D]d 2. A (B|A B|A = B |A ≠ B 3. B (З | B*C | B**C | B+C | B-C | B/C 4. З (bAc | E | F 5. E (g{g|f} 6. F (f{f} 7. D (Eb[G{hG}]c 8. G (E | F | (.

Z.

a b A з D.

B A E.

З B g{g} b G c.

E З (.

g E.

g.

While (A >) cls ().

;

тупикова ситуация.

Тестування на цепочках.

Протокол роботи синтаксичного распознавателя оператора циклу while мови С.

_____________________________________________________________________ Обробляємо рядок — While (a>)cls (); Найден While перевірка почалося з символу — (Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — a Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ —) Перевірка на ЦБЗ, поточний символ —) Перевірка на FUNC, поточний символ — з Перевірка на IDENT, поточний символ — c.

Знайдені помилки у рядку While (a>)cls ();

Попередження: Відсутня умова () Не знайдено ідентифікатор чи ЦБЗ _____________________________________________________________________ Обробляємо рядок — while (13t*(ewqw++()*we) rscr (456,345,rtgrt, 34 5444rtr,).

Відсутня (Відсутня) Попередження: Відсутня умова () Відсутня; після функції Параметр функції неспроможна начинатся з цифри Невідомий идентификатор (ы) ;

435, 4, Не знайдено ідентифікатор чи ЦБЗ Ідентифікатор неспроможна починатися з цифри Не знайдено або вірний параметр Невідома знакова конструкція _____________________________________________________________________ Обробляємо рядок — whiLE (43-(sss (5 445 344>(5445r+erhgeerg (e>=rwe+++r+788erwe++)) scr (eee, qeer+erhgeerg (e>=rwe+++r+788erwe++)) scr (eee, qee77777u777) clrscr (,…,).

Найден While перевірка почалося з символу — (Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — і Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — 7 Перевірка на ЦБЗ, поточний символ — 7 Перевірка на FUNC, поточний символ — Перевірка на IDENT, поточний символ — з Перевірка на PAR, поточний символ —, Перевірка на IDENT, поточний символ —, Перевірка на ЦБЗ, поточний символ — ,.

Знайдені помилки у рядку while (i>77777u777) clrscr (,…,).

Відсутня; після функції Ідентифікатор неспроможна починатися з цифри Не знайдено або вірний параметр _____________________________________________________________________Обрабат ываем рядок — while (4545>>445—- ;

Найден While перевірка почалося з символу — (Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — 4 Перевірка на ЦБЗ, поточний символ — 4 Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — 4 Перевірка на ЦБЗ, поточний символ — 4 Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — Перевірка на ЦБЗ, поточний символ — Перевірка на FUNC, поточний символ —; Перевірка на IDENT, поточний символ — ;

Знайдені помилки у рядку while (4545>>445—- ;

Відсутня) Попередження: відсутня ім'я функції Не знайдено ідентифікатор чи ЦБЗ Невідома знакова конструкція _____________________________________________________________________ Обробляємо рядок — while (i>=0);

Найден While перевірка почалося з символу — (Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — і Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — 0 Перевірка на ЦБЗ, поточний символ — 0 Перевірка на FUNC, поточний символ —; Перевірка на IDENT, поточний символ — ;

Знайдені помилки у рядку while (i>=0);

Попередження: відсутня ім'я функції _____________________________________________________________________ Обробляємо рядок — while (i>=0) 544();

Найден While перевірка почалося з символу — (Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — і Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — 0 Перевірка на ЦБЗ, поточний символ — 0 Перевірка на FUNC, поточний символ — Перевірка на IDENT, поточний символ — 5.

Знайдені помилки у рядку while (i>=0) 544();

Відсутня; після функції Попередження: відсутня ім'я функції _____________________________________________________________________ Обробляємо рядок — whilei>=0) clrscr ();13.

Найден While перевірка почалося з символу — і Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — і Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — 0 Перевірка на ЦБЗ, поточний символ — 0 Перевірка на FUNC, поточний символ — Перевірка на IDENT, поточний символ — c.

Знайдені помилки у рядку whilei>=0) clrscr ();13.

Відсутня (Попередження: Відсутня умова () _____________________________________________________________________ Обробляємо рядок — whilertt3432*23 432).

Найден While перевірка почалося з символу — (Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — d Перевірка на AB Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — 3 Перевірка на ЦБЗ, поточний символ — 3 Перевірка на TERM Перевірка на O Перевірка на IDENT, поточний символ — 2 Перевірка на ЦБЗ, поточний символ — 2 Перевірка на FUNC, поточний символ ;

Проверка на IDENT, поточний символ ;

Знайдені помилки у рядку while (dd>>3432*23 432).

Відсутня; після функції Попередження: відсутня ім'я функції Невідома знакова конструкция.

Лістинг программы.

ВАРИАHТ # 10.

Синтаксический распознователь оператора циклу While.

Файл програми — А513. cpp з текстом для распознования — test.513 з протоколом роботи — error.513.

Кафедpа: АСУ Гpуппа: А-513 Студент: Стариків Дмитро Олександрович Пpеподаватели: кандидата технічних наук, доцент.

Шоpников Юpий Владимиpович, асистент Панова Веpа Боpисовна Дата: 30 травня 1997 г.

//————————————————————————————————————— — // Заголовкові файли. //————————————————————————————————————— — #include #include #include #include #include #include.

#define UP 72 // стрілка вгору #define DOWN 80 // стрілка вниз #define ALTX 45 // вихід #define F1 59 #define F2 60 #define F3 61 #define ESC 27.

#define FL_NAME «test.513 «#define FL_TEST «error.513 «.

void open_fl (void); // откpыть файл void work_space (void); // упpавляет pабочей областю void print_page (void); // друкує текст на экpан void help_line (void); // текст з допомогою нижня стpочка void help (int); int scan (); // Робить розбір рядки int my_while (); // опеpатоp int AB (); // арифметичне вираз int TERM (); // Терм int O (); // Операнд int IDENT (); // Ідентифікатор int ZBZ (); // Ціле без знака int FUNC (); // Функція int PAR (); // Параметр

char TEXT[22][80]; int position; // Номер поточної сторінки int cur_y=3; // становище куpсоpа на экpане int x, y; // Поточна позиція при компіляції в рядку int f=0; // При f=1 помилки для функції char screen[4096]; // Сохpаняет повну копію экpана char screen1[4096]; // Сохpаняет частина экpана char *mistake[]={ «Помилок немає!!! », //0.

" Опеpатоp while не знайдено ", //1.

" Відсутня («, //2.

" Відсутня) ", //3.

" Попередження: Відсутня умова () ", //4.

" Відсутня; після функції «, //5.

" Попередження: відсутня ім'я функції «, //6.

" Пропущено / чи * чи ** чи + чи — «, //7.

" «, //8.

" Параметр функції неспроможна начинатся з цифри ", //9.

" Невідомий идентификатор (ы) — «, //10.

" Не знайдено ідентифікатор чи ЦБЗ ", //11.

" Ідентифікатор неспроможна починатися з цифри ", //12.

" Не знайдено або вірний параметр ", //13.

" Невідома знакова конструкція ", //14.

" «}; //15 FILE *fl_t;

int mistake_number[15]; //масив який зберігає коди помилок (0 чи 1).

//де 1-ошибка присутсвует, 0 у протилежному случае.

//mistake_number[i], де і номер помилки з mistake char strange[100]; //перелік невідомих идентификаторов.

//найденых в рядку під час розбору int s=0; //поточна позиція в strange.

void main ().

{ open_fl (); help_line (); print_page (); work_space ();

} //————————————————————————————————————— — // Відкриття файла //————————————————————————————————————— — void open_fl (void).

{.

FILE *fl; int і; window (1,1,80,25); textbackground (BLACK); textcolor (WHITE); clrscr ();

_setcursortype (_NOCURSOR); if ((fl_t= fopen (FL_TEST, «w »))== NULL) exit (1); if ((fl = fopen (FL_NAME, «r »))==NULL).

{ window (18,10,60,16); textbackground (GREEN); textcolor (BLACK); clrscr (); gotoxy (5,2);cprintf («Неможу знайти файл test.513 »); gotoxy (5,3);cprintf («Проверте його наявність на диску »); gotoxy (5,4);cprintf («чи створіть новий »); gotoxy (3,6);cprintf («Для продовження натисніть будь-яку клавішу »); getch (); exit (0);

} for (i=0;i Б{Б|Ц}rrrrn "); cprintf («6. -> Ц{Ц}rn »); cprintf («7. -> ([{,}])rn »); cprintf («8. -> | rn »);

} if (n == 3).

{ cprintf («n МОВА ОПЕРАТОРАnnnrr »); cprintf («WHILE (AB) [FUNCTION ([PAR, PAR,…])]; rnn »); cprintf («AB — Вислів rn »); cprintf («FUNCTION — функцияrn »); cprintf («PAR — параметри функції, може бути цифри чи текст rn »); cprintf («кількість їх ограниченоrnn »); cprintf («Прогалини між символами недопустимыrnnn »);

} getch (); puttext (1,8,80,22,string); window (1,1,80,25);

}.

//————————————————————————————————————— — // Сканує до появи While //————————————————————————————————————— — int scan ().

{ int k, j, w; //лічильники mistake_number[1]=1; for (j=0;;j++).

{ if (TEXT[x][j] == NULL) break; if (TEXT[x][j] == «W »).

{ y=j; //якщо знайшли W чи w if (my_while () == 1) break; //то вызываем.

} //my_while if (TEXT[x][j] == «w »).

{ y=j; if (my_while () == 1) break;

} if (TEXT[x][j] ≠ «»).

{ strange[s++]=TEXT[x][j]; mistake_number[10]=1;

} if (TEXT[x][j] == «»).

{ strange[s++]= «, «; strange[s++]= «» ;

}.

} strange[s]=NULL; return (1);

}.

//————————————————————————————————————— — // Обробляє While і обробку функцій //————————————————————————————————————— — int my_while ().

{ char str[10]; int k, j, w; //лічильники for (w=0;w ").

{ y++; if (TEXT[x][y] == «= «) y++; for (z=0;z.

Показати весь текст
Заповнити форму поточною роботою