Реферат: Построение формального языка L

--PAGE_BREAK--Выбор метода анализа


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
























































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


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

Основная идея метода состоит в том, что по контексту без возврата отбрасываются те символы, которые привели в тупиковую ситуацию и разбор продолжается.

Приведем пример синтаксического разбора:
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 àg{g|f}

6. F à f{f}

7. D àEb[G{hG}]c

8. G àE | F | Ω

<img width=«283» height=«97» src=«ref-1_401475380-932.coolpic» v:shapes="_x0000_s1054"><img width=«131» height=«59» src=«ref-1_401476312-726.coolpic» v:shapes="_x0000_s1044"><img width=«78» height=«55» src=«ref-1_401477038-486.coolpic» v:shapes="_x0000_s1041"><img width=«86» height=«55» src=«ref-1_401477524-506.coolpic» v:shapes="_x0000_s1028"><img width=«127» height=«62» src=«ref-1_401478030-692.coolpic» v:shapes="_x0000_s1026">                             Z

<img width=«2» height=«40» src=«ref-1_401478722-161.coolpic» v:shapes="_x0000_s1030"> <img width=«2» height=«215» src=«ref-1_401478883-175.coolpic» v:shapes="_x0000_s1042">




<img width=«82» height=«59» src=«ref-1_401479058-474.coolpic» v:shapes="_x0000_s1052"><img width=«33» height=«48» src=«ref-1_401479532-394.coolpic» v:shapes="_x0000_s1050"><img width=«21» height=«14» src=«ref-1_401479926-229.coolpic» v:shapes="_x0000_s1045"><img width=«32» height=«10» src=«ref-1_401480155-213.coolpic» v:shapes="_x0000_s1043"><img width=«37» height=«18» src=«ref-1_401480368-307.coolpic» v:shapes="_x0000_s1031">a        b                  A              c         D

<img width=«2» height=«211» src=«ref-1_401480675-175.coolpic» v:shapes="_x0000_s1055"><img width=«2» height=«36» src=«ref-1_401480850-157.coolpic» v:shapes="_x0000_s1048"><img width=«2» height=«215» src=«ref-1_401481007-173.coolpic» v:shapes="_x0000_s1034"><img width=«2» height=«215» src=«ref-1_401481180-163.coolpic» v:shapes="_x0000_s1029"><img width=«2» height=«211» src=«ref-1_401481343-168.coolpic» v:shapes="_x0000_s1027">                   B                 A         E              

<img width=«2» height=«29» src=«ref-1_401481511-161.coolpic» v:shapes="_x0000_s1046"><img width=«2» height=«21» src=«ref-1_401481672-155.coolpic» v:shapes="_x0000_s1037"><img width=«2» height=«21» src=«ref-1_401481827-153.coolpic» v:shapes="_x0000_s1032">                  

                   C                 B         g{g} b       G       c

<img width=«2» height=«150» src=«ref-1_401481980-164.coolpic» v:shapes="_x0000_s1057"><img width=«2» height=«150» src=«ref-1_401482144-166.coolpic» v:shapes="_x0000_s1056"><img width=«2» height=«154» src=«ref-1_401482310-164.coolpic» v:shapes="_x0000_s1053"><img width=«2» height=«25» src=«ref-1_401482474-153.coolpic» v:shapes="_x0000_s1051"><img width=«2» height=«146» src=«ref-1_401482627-163.coolpic» v:shapes="_x0000_s1049"><img width=«2» height=«150» src=«ref-1_401482790-164.coolpic» v:shapes="_x0000_s1047"><img width=«2» height=«21» src=«ref-1_401482954-155.coolpic» v:shapes="_x0000_s1038"><img width=«2» height=«21» src=«ref-1_401483109-155.coolpic» v:shapes="_x0000_s1033">                  

                   E                 C                          Ω

<img width=«2» height=«21» src=«ref-1_401483264-155.coolpic» v:shapes="_x0000_s1039"><img width=«2» height=«21» src=«ref-1_401483419-155.coolpic» v:shapes="_x0000_s1036">                  

                   g                 E

<img width=«2» height=«21» src=«ref-1_401481672-155.coolpic» v:shapes="_x0000_s1040"><img width=«2» height=«59» src=«ref-1_401483729-157.coolpic» v:shapes="_x0000_s1035">                                     

                                      g
<img width=«29» height=«59» src=«ref-1_401483886-533.coolpic» v:shapes="_x0000_s1058">While (       A          >                )   cls   (                 )            ;
                   тупиковая ситуация

    продолжение
--PAGE_BREAK--Тестирование на цепочках


Протокол работы синтаксического распознавателя оператора цикла 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)
  Отсутствует; после функции

  Предупреждение: отсутствует имя функции

  Неизвестная знаковая конструкция


    продолжение
--PAGE_BREAK--
еще рефераты
Еще работы по информатике