Реферат: Построение формального языка 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--
еще рефераты
Еще работы по информатике
Реферат по информатике
Разработка синтаксического распознавателя вычисляемого оператора перехода языка FORTRAN
2 Сентября 2013
Реферат по информатике
Разработка формальных грамматик
18 Июня 2015
Реферат по информатике
Информационные технологии в финансовом менеджменте
18 Июня 2015
Реферат по информатике
Криптографическая защита функционирование ЛВС в реальном режиме времени
18 Июня 2015