Построение формального языка
L
WHILE( <AB> ) [<FUNCTION([<PAR>, <PAR>, ...])>];
WHILE - входной терминальный символ
<AB > - условное выражение
<FUNCTION> - некоторая функция,
которая может отсутствовать
<PAR> - параметры функции, которые
тоже могут отсутствовать
Пример
правильного синтаксиса:
WHILE(A>44<b=56+67)
clrscr();
A>44<b=56+67
- условное
выражение
clrscr() - функция, без параметров
Подбор грамматики G[Z] по
языку L
Любая грамматика, к примеру G[Z], содержит следующие базисные
элементы Vt, Vn,
Z, P, где:
Vt - словарь терминальных
символов
Vn - словарь нетерминальных
символов
Z - начальный нетерминальный символ
P - множество правил вывода
G[<оператор>]:
1.
<Оператор> à while(<AB> ) [<Функция>];
2. <AB>à
T|<AB> <
T|<AB> > T|<AB> <= T
| <AB> >= T | <AB> != T
3. <T> à O | T*O |
T**O | T+O | T-O | T/O
4. <O> à (<AB>)
| <IDENT> | <ЦБЗ>
5. <IDENT> à БЦ
6. <ЦБЗ> à Ц{Ц}
7. <Функция> à <IDENT>([<PAR>{,<PAR>}])
8. <PAR> à <IDENT> | <ЦБЗ> | Ω
Классификация
G[Z]
G[<оператор>]:
1.
<Оператор> à while(<AB> ) [<Функция>];
2. <AB>à
T|<AB> <
T|<AB> > T|<AB> <= T
| <AB> >= T | <AB> != T
3. <T> à O | T*O |
T**O | T+O | T-O | T/O
4. <O> à (<AB>)
| <IDENT> | <ЦБЗ>
5. <IDENT> à ББ
6. <ЦБЗ> à Ц{Ц}
7. <Функция> à <IDENT>([<PAR>{,<PAR>}])
8. <PAR> à <IDENT> | <ЦБЗ> | Ω
Сделаем
замену нетерминальных символов:
<Оператор> à Z
<AB> à A
<T> à
B
<O> à C
<Функция > à D
<IDENT> à E
<ЦБЗ> à
F
<PAR> à G
Сделаем
замену терминальных символов:
WHILE à a
( à b
) à c
;
à d
Ц à f
Б à g
,
à h
G[Z]:
1. Z à abAc[D]d
2. Aà
B|A<B|A > B|A <= B |A >= B |A != B
3. B
à C | B*C | B**C | B+C | B-C | B/C
4. C
à bAc | E | F
5. E
à
gg
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 |A >= B |A != B
3. B
à C | B*C | B**C | B+C | B-C | B/C
4. C
à bAc | E | F
5. E
à
gg
6. F
à
f{f}
7. D à
Eb[G{hG}]c
8. G
à
E | F |
Ω
Z
a b
A c D
B A E
C B g{g} b G c
E C Ω
g E
g
While
( A >
) cls ( ) ;
тупиковая ситуация
Тестирование на цепочках
Протокол работы синтаксического распознавателя
оператора цикла while языка С.
_____________________________________________________________________
Обрабатываем строчку - While(a>)cls();
Найден While проверка началась с символа - (
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - a
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - )
Проверка на ЦБЗ,
текущий символ - )
Проверка на FUNC,
текущий символ - c
Проверка на IDENT, текущий символ - c
Найденные ошибки в
строке While(a>)cls();
Предупреждение:
Отсутствует условие ()
Не найден
идентификатор или ЦБЗ
_____________________________________________________________________
Обрабатываем строчку -
while(1<(3*(43+5*(3-4-(4<454)))) ;
Найден While проверка началась с символа - (
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 1
Проверка на ЦБЗ,
текущий символ - 1
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 3
Проверка на ЦБЗ,
текущий символ - 3
Проверка на TERM
Проверка на O
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 4
Проверка на ЦБЗ,
текущий символ - 4
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 5
Проверка на ЦБЗ,
текущий символ - 5
Проверка на TERM
Проверка на O
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 3
Проверка на ЦБЗ,
текущий символ - 3
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 4
Проверка на ЦБЗ,
текущий символ - 4
Проверка на TERM
Проверка на O
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 4
Проверка на ЦБЗ,
текущий символ - 4
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 4
Проверка на ЦБЗ,
текущий символ - 4
Проверка на FUNC,
текущий символ - ;
Проверка на IDENT, текущий символ - ;
Найденные ошибки в
строке while(1<(3*(43+5*(3-4-(4<454)))) ;
Отсутствует )
Предупреждение:
отсутствует имя функции
_____________________________________________________________________
Обрабатываем строчку - 435 4 whilei>>3t*(ewqw++()*we)
rscr(456,345,rtgrt,345444rtr,,,)
Найден While проверка началась с символа - i
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - i
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 3
Проверка на ЦБЗ,
текущий символ - 3
Проверка на TERM
Проверка на O
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - e
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - +
Проверка на ЦБЗ,
текущий символ - +
Проверка на TERM
Проверка на O
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - w
Проверка на FUNC,
текущий символ - r
Проверка на IDENT, текущий символ - r
Проверка на PAR,
текущий символ - 4
Проверка на IDENT, текущий символ - 4
Проверка на ЦБЗ,
текущий символ - 4
Проверка на PAR,
текущий символ - 3
Проверка на IDENT, текущий символ - 3
Проверка на ЦБЗ,
текущий символ - 3
Проверка на PAR,
текущий символ - r
Проверка на IDENT, текущий символ - r
Проверка на PAR,
текущий символ - 3
Проверка на IDENT, текущий символ - 3
Проверка на ЦБЗ,
текущий символ - 3
Проверка на PAR,
текущий символ - ,
Проверка на IDENT, текущий символ - ,
Проверка на ЦБЗ,
текущий символ - ,
Найденные ошибки в
строке 435 4 whilei>>3t*(ewqw++()*we) rscr(456,345,rtgrt,345444rtr,,,)
Отсутствует (
Отсутствует )
Предупреждение:
Отсутствует условие ()
Отсутствует ; после
функции
Параметр функции не
может начинатся с цифры
Неизвестный
идентификатор(ы) -
435, 4,
Не найден
идентификатор или ЦБЗ
Идентификатор не
может начинаться с цифры
Не найден или не
верный параметр
Неизвестная
знаковая конструкция
_____________________________________________________________________
Обрабатываем строчку - whiLE(43-(sss<233)fewfew) sd(we)
Найден While проверка началась с символа - (
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 4
Проверка на ЦБЗ,
текущий символ - 4
Проверка на TERM
Проверка на O
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - s
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 2
Проверка на ЦБЗ,
текущий символ - 2
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - f
Проверка на FUNC,
текущий символ -
Проверка на IDENT, текущий символ - s
Проверка на PAR,
текущий символ - w
Проверка на IDENT, текущий символ - w
Найденные ошибки в
строке whiLE(43-(sss<233)fewfew) sd(we)
Отсутствует ; после
функции
Пропущено / или *
или ** или + или -
_____________________________________________________________________
Обрабатываем строчку -
while(i>344>(5445<<2323*343243+2343*(w))>23*232) clrscr(,)
Найден While проверка началась с символа - (
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - i
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 3
Проверка на ЦБЗ,
текущий символ - 3
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 5
Проверка на ЦБЗ,
текущий символ - 5
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 2
Проверка на ЦБЗ,
текущий символ - 2
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 3
Проверка на ЦБЗ,
текущий символ - 3
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 2
Проверка на ЦБЗ,
текущий символ - 2
Проверка на TERM
Проверка на O
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - w
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 2
Проверка на ЦБЗ,
текущий символ - 2
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 2
Проверка на ЦБЗ,
текущий символ - 2
Проверка на FUNC,
текущий символ -
Проверка на IDENT, текущий символ - c
Проверка на PAR,
текущий символ - ,
Проверка на IDENT, текущий символ - ,
Проверка на ЦБЗ,
текущий символ - ,
Найденные ошибки в
строке while(i>344>(5445<<2323*343243+2343*(w))>23*232)
clrscr(,)
Отсутствует ; после
функции
Не найден или не
верный параметр
Неизвестная
знаковая конструкция
_____________________________________________________________________
Обрабатываем строчку -
while(u>r+erhgeerg(e>=rwe+++r+788erwe++)) scr(eee,qee<)
Найден While проверка началась с символа - (
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - u
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - r
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - e
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - e
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - r
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - r
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 7
Проверка на ЦБЗ,
текущий символ - 7
Проверка на FUNC,
текущий символ -
Проверка на IDENT, текущий символ - s
Проверка на PAR,
текущий символ - e
Проверка на IDENT, текущий символ - e
Проверка на PAR,
текущий символ - q
Проверка на IDENT, текущий символ - q
Проверка на PAR,
текущий символ - <
Проверка на IDENT, текущий символ - <
Проверка на ЦБЗ,
текущий символ - <
Найденные ошибки в
строке while(u>r+erhgeerg(e>=rwe+++r+788erwe++)) scr(eee,qee<)
Отсутствует ; после
функции
Пропущено / или *
или ** или + или -
Идентификатор не
может начинаться с цифры
Не найден или не
верный параметр
_____________________________________________________________________
Обрабатываем строчку - while(i>77777u777) clrscr(,...,)
Найден While проверка началась с символа - (
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - i
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 7
Проверка на ЦБЗ,
текущий символ - 7
Проверка на FUNC,
текущий символ -
Проверка на IDENT, текущий символ - c
Проверка на 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, текущий символ - i
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 0
Проверка на ЦБЗ,
текущий символ - 0
Проверка на FUNC,
текущий символ - ;
Проверка на IDENT, текущий символ - ;
Найденные ошибки в
строке while(i>=0);
Предупреждение:
отсутствует имя функции
_____________________________________________________________________
Обрабатываем строчку - while(i>=0) 544();
Найден While проверка началась с символа - (
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - i
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 0
Проверка на ЦБЗ,
текущий символ - 0
Проверка на FUNC,
текущий символ -
Проверка на IDENT, текущий символ - 5
Найденные ошибки в
строке while(i>=0) 544();
Отсутствует ; после
функции
Предупреждение:
отсутствует имя функции
_____________________________________________________________________
Обрабатываем строчку - whilei>=0) clrscr();13
Найден While проверка началась с символа - i
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - i
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 0
Проверка на ЦБЗ,
текущий символ - 0
Проверка на FUNC,
текущий символ -
Проверка на IDENT, текущий символ - c
Найденные ошибки в
строке whilei>=0) clrscr();13
Отсутствует (
Предупреждение:
Отсутствует условие ()
_____________________________________________________________________
Обрабатываем строчку - whilertt<=243+++344-23!=345 wwqwq;
Найден While проверка началась с символа - r
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - r
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 2
Проверка на ЦБЗ,
текущий символ - 2
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 3
Проверка на ЦБЗ,
текущий символ - 3
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 2
Проверка на ЦБЗ,
текущий символ - 2
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - =
Проверка на ЦБЗ,
текущий символ - =
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 3
Проверка на ЦБЗ,
текущий символ - 3
Проверка на FUNC,
текущий символ - w
Проверка на IDENT, текущий символ - w
Найденные ошибки в
строке whilertt<=243+++344-23!=345 wwqwq;
Отсутствует (
Отсутствует )
Не найден
идентификатор или ЦБЗ
Не найден или не
верный параметр
_____________________________________________________________________
Обрабатываем строчку - while(dd>>3432*23432)
Найден While проверка началась с символа - (
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - d
Проверка на AB
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 3
Проверка на ЦБЗ,
текущий символ - 3
Проверка на TERM
Проверка на O
Проверка на IDENT, текущий символ - 2
Проверка на ЦБЗ,
текущий символ - 2
Проверка на FUNC,
текущий символ -
Проверка на IDENT, текущий символ -
Найденные ошибки в
строке while(dd>>3432*23432)
Отсутствует ; после
функции
Предупреждение:
отсутствует имя функции
Неизвестная
знаковая конструкция
Листинг программы
ВАРИАHТ # 10
Синтаксический распознователь оператора цикла While
Файл программы
- А513.cpp
с
текстом для распознования - test.513
с протоколом работы -
error.513
Кафедpа : АСУ
Гpуппа : А-513
Студент : Стариков Дмитрий Александрович
Пpеподаватели :
кандидат технических наук, доцент
Шоpников Юpий Владимиpович,
ассистент Панова Веpа Боpисовна
Дата : 30 мая 1997г.
//----------------------------------------------------------------------------
// Заголовочные файлы.
//----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
#include <dos.h>
#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], где 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 i;
fprintf(fl_t,"Обрабатываем строчку - %s\n",TEXT[x]);
scan(); //вызывает сканер для
разбора строки
fprintf(fl_t,"\n Найденные ошибки в строке %s\n",TEXT[x]);
for(i=0;i<=15;i++)
if(mistake_number[i] == 1)
{
gotoxy(4,xx++);
printf("%s ",mistake[i]);
fprintf(fl_t,"
%s\n",mistake[i]);
if(i==10 && mistake_number[i] == 1)
{
printf(" %s",strange);
fprintf(fl_t,"
%s\n",strange);
}
}
if(xx ==
10) //ошибок нет, т.к.
координаты строки
{ //неизменились
(xx)
gotoxy(4,xx++);
printf("%s ",mistake[0]);
}
textbackground(BLACK);
textcolor(WHITE);
if(TEXT[0][0]!=NULL)
{
for
(i=1;i<6;i++)
{
if(TEXT[i-1+position][0]==NULL) break;
gotoxy(1,i+2);
puts(TEXT[i-1+position]);
}
}
gotoxy(1,cur_y);
textbackground(RED);
clreol();
puts(TEXT[cur_y+position-3]);
}
//----------------------------------------------------------------------------
// Выводит на экран текст с помощью
//----------------------------------------------------------------------------
void help_line(void)
{
window(1,1,80,25);
textbackground(BLACK);
clrscr();
textbackground(GREEN);
textcolor(BLACK);
gotoxy(1,1);
clreol();
printf(" Borland
C++ Веpсия только для опеpатоpа
WHILE");
gotoxy(1,25);
textbackground(LIGHTCYAN);
clreol();
cprintf(" F1 - Помощь F2 -
Грамматика F3 - Язык оператора ALT+X-Выход");
gotoxy(1,2);
textbackground(LIGHTCYAN);
clreol();
printf("------------------------------ СООБЩЕНИЯ ОБ ОШИБКАХ
----------------------------");
gotoxy(1,9);
gettext(1,1,80,25,screen);
gettext(1,9,80,24,screen1);
}
//----------------------------------------------------------------------------
// Выводит на экран текст, в зависимости от значения n
//----------------------------------------------------------------------------
void help(int n)
{
char
string[4096];
cprintf(" AB - Выражение \r\n");
cprintf(" FUNCTION - функция\r\n");
cprintf(" PAR - параметры функции, могут быть цифры
или текст \r\n");
cprintf("
количество их не ограничено\r\n\n");
cprintf(" Пробелы между
символами недопустимы\r\n\n\n");
}
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;
//счетчики
}
}
if(TEXT[x][y]
!= ';') mistake_number[5]=1;
return(1);
}
//----------------------------------------------------------------------------
// Обработка параметров функции
//----------------------------------------------------------------------------
int PAR()
{
fprintf(fl_t,"Проверка на PAR,
текущий символ - %c\n",TEXT[x][y]);
if(IDENT() ==
0)
if(ZBZ() == 0)
{
mistake_number[13]=1;
return(0);
}
return(1);
}
Список литературы:
1. Д. Грис Конструирование компиляторов для цифровых вычислительных машин.
М., Мир, 1975.
2. Лебедев В.Н. Введение в системы программирования. М., «Статистика»,
1975.
3. Шорников Ю.В., Шегал Б.Р. Методическое пособие для выполнения курсовой
работы по системному программированию. Новосибирск, 1992.