Реферат: Разработка синтаксического распознавателя вычисляемого оператора перехода языка FORTRAN
Министерство науки, высшей школы и технической политики РоссийскойФедерации.
Новосибирский Государственный
Технический Университет.
<img src="/cache/referats/1179/image002.jpg" v:shapes="_x0000_i1025">
<span ER Architect 1251"">Курсовая работа по системномупрограммированию.
Разработкасинтаксического распознавателя вычисляемого оператора перехода языка FORTRAN.
Факультет: АВТ.
Кафедра: АСУ.
Группа: А-513.
Студент: БорзовАндрей Николаевич.
Преподаватель:Шорников Юрий Владимирович.
Ассистент: ПановаВера Борисовна.
Дата:19 мая1997 года.
Отметка озащите: _______________________________
<span Old-Town",«serif»">
<span Old-Town",«serif»">
<span Old-Town",«serif»">
Новосибирск– 1997.<span Old-Town",«serif»">
<span Arial",«sans-serif»; mso-fareast-font-family:«Times New Roman»;mso-bidi-font-family:«Times New Roman»; mso-font-kerning:14.0pt;mso-ansi-language:RU;mso-fareast-language:RU; mso-bidi-language:AR-SA"><span Courier New";mso-bidi-font-family:«Times New Roman»">Языкоператора.
<span Courier New";mso-bidi-font-family:«Times New Roman»">Язык вычисляемогооператора перехода языка
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">FORTRAN.<span Courier New";mso-bidi-font-family:«Times New Roman»"><span Courier New";mso-bidi-font-family:«Times New Roman»">
<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">GOTO
<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">МЕТКА½<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">КОНСТАНТА½<span Arial",«sans-serif»; mso-bidi-font-family:«Times New Roman»">АРИФМЕТИЧЕСКОЕ ВЫРАЖЕНИЕ<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">
<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">МЕТКА – Идентификатор
<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">
<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">КОНСТАНТА– ЦЕЛОЕ БЕЗ ЗНАКА
<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">
<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">АРИФМЕТИЧЕСКОЕВЫРАЖЕНИЕ – ВЫРАЖЕНИЕ, СОДЕРЖАЩЕЕ В СЕБЕ ОПЕРАЦИИ *, /, -, +, **, А ТАКЖЕ ( ).
<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">
<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">** –ВОЗВЕДЕНИЕ В СТЕПЕНЬ.
<span Arial",«sans-serif»;mso-bidi-font-family:«Times New Roman»">
<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-bidi-font-family:«Times New Roman»;mso-font-kerning:14.0pt; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA"><span Courier New";mso-bidi-font-family:«Times New Roman»">Грамматикаязыка.
<span Courier New";mso-bidi-font-family:«Times New Roman»">
<span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">G[<
<span Courier New";mso-bidi-font-family:«Times New Roman»">ОПЕРАТОР<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">>]<span Courier New"; mso-bidi-font-family:«Times New Roman»">:<span Courier New"; mso-fareast-font-family:«Courier New»">1.
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><<span Courier New"; mso-bidi-font-family:«Times New Roman»">ОПЕРАТОР<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">><span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New";mso-hansi-font-family: «Courier New»;mso-ansi-language:EN-US;mso-char-type:symbol;mso-symbol-font-family: Symbol">®<span Courier New";mso-bidi-font-family:«Times New Roman»"><span Courier New"; mso-bidi-font-family:«Times New Roman»;mso-ansi-language:EN-US">GOTO <<span Courier New";mso-bidi-font-family:«Times New Roman»">ВЫРАЖЕНИЕ<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">><span Courier New"; mso-bidi-font-family:«Times New Roman»"><span Courier New"; mso-fareast-font-family:«Courier New»">2.
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><<span Courier New"; mso-bidi-font-family:«Times New Roman»">ВЫРАЖЕНИЕ<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">><span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New";mso-hansi-font-family: «Courier New»;mso-ansi-language:EN-US;mso-char-type:symbol;mso-symbol-font-family: Symbol">®<span Courier New";mso-bidi-font-family:«Times New Roman»"> Т <span Courier New";mso-hansi-font-family: «Courier New»;mso-char-type:symbol;mso-symbol-font-family:Symbol">ç<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><<span Courier New"; mso-bidi-font-family:«Times New Roman»">ВЫРАЖЕНИЕ<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">><span Courier New"; mso-bidi-font-family:«Times New Roman»">+Т <span Courier New";mso-hansi-font-family:«Courier New»; mso-char-type:symbol;mso-symbol-font-family:Symbol">ç<span Courier New";mso-bidi-font-family:«Times New Roman»"> <span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><<span Courier New"; mso-bidi-font-family:«Times New Roman»">ВЫРАЖЕНИЕ<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">><span Courier New";mso-hansi-font-family:«Courier New»; mso-ansi-language:EN-US;mso-char-type:symbol;mso-symbol-font-family:Symbol">-<span Courier New";mso-bidi-font-family:«Times New Roman»">Т<span Courier New"; mso-fareast-font-family:«Courier New»">3.
<span Courier New";mso-bidi-font-family:«Times New Roman»">Т <span Courier New"; mso-hansi-font-family:«Courier New»;mso-ansi-language:EN-US;mso-char-type:symbol; mso-symbol-font-family:Symbol">®<span Courier New"; mso-bidi-font-family:«Times New Roman»"> О <span Courier New";mso-hansi-font-family:«Courier New»; mso-char-type:symbol;mso-symbol-font-family:Symbol">ç<span Courier New";mso-bidi-font-family:«Times New Roman»">Т<span Courier New";mso-hansi-font-family: «Courier New»;mso-char-type:symbol;mso-symbol-font-family:Symbol">*<span Courier New";mso-bidi-font-family:«Times New Roman»">О <span Courier New";mso-hansi-font-family: «Courier New»;mso-char-type:symbol;mso-symbol-font-family:Symbol">ç<span Courier New";mso-bidi-font-family:«Times New Roman»"> Т<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">/<span Courier New"; mso-bidi-font-family:«Times New Roman»">О <span Courier New";mso-hansi-font-family:«Courier New»; mso-char-type:symbol;mso-symbol-font-family:Symbol">ê<span Courier New";mso-bidi-font-family:«Times New Roman»">Т<span Courier New";mso-hansi-font-family: «Courier New»;mso-char-type:symbol;mso-symbol-font-family:Symbol">**<span Courier New";mso-bidi-font-family:«Times New Roman»">О<span Courier New"; mso-fareast-font-family:«Courier New»">4.
<span Courier New";mso-bidi-font-family:«Times New Roman»">О <span Courier New"; mso-hansi-font-family:«Courier New»;mso-ansi-language:EN-US;mso-char-type:symbol; mso-symbol-font-family:Symbol">®<span Courier New"; mso-bidi-font-family:«Times New Roman»">(<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US"><<span Courier New"; mso-bidi-font-family:«Times New Roman»">ВЫРАЖЕНИЕ<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">><span Courier New"; mso-bidi-font-family:«Times New Roman»">) <span Courier New";mso-hansi-font-family:«Courier New»; mso-char-type:symbol;mso-symbol-font-family:Symbol">ç<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><<span Courier New"; mso-bidi-font-family:«Times New Roman»">ИДЕНТИФИКАТОР<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">> <span Courier New";mso-hansi-font-family:«Courier New»; mso-char-type:symbol;mso-symbol-font-family:Symbol">ç<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><<span Courier New"; mso-bidi-font-family:«Times New Roman»">ДБЗ<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">><span Courier New"; mso-bidi-font-family:«Times New Roman»"><span Courier New"; mso-fareast-font-family:«Courier New»">5.
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><<span Courier New"; mso-bidi-font-family:«Times New Roman»">ИДЕНТИФИКАТОР<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">><span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New";mso-hansi-font-family: «Courier New»;mso-ansi-language:EN-US;mso-char-type:symbol;mso-symbol-font-family: Symbol">®<span Courier New";mso-bidi-font-family:«Times New Roman»"> Б<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">{<span Courier New"; mso-bidi-font-family:«Times New Roman»">Б <span Courier New";mso-hansi-font-family:«Courier New»; mso-char-type:symbol;mso-symbol-font-family:Symbol">ç<span Courier New";mso-bidi-font-family:«Times New Roman»">Ц<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">}[<span Courier New";mso-hansi-font-family:«Courier New»; mso-ansi-language:EN-US;mso-char-type:symbol;mso-symbol-font-family:Symbol">L<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">]<span Courier New"; mso-bidi-font-family:«Times New Roman»"><span Courier New"; mso-fareast-font-family:«Courier New»">6.
<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US"><<span Courier New"; mso-bidi-font-family:«Times New Roman»">ДБЗ<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">><span Courier New"; mso-bidi-font-family:«Times New Roman»"> <span Courier New";mso-hansi-font-family: «Courier New»;mso-ansi-language:EN-US;mso-char-type:symbol;mso-symbol-font-family: Symbol">®<span Courier New";mso-bidi-font-family:«Times New Roman»"> Ц<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">{<span Courier New"; mso-bidi-font-family:«Times New Roman»">Ц<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">}[<span Courier New"; mso-bidi-font-family:«Times New Roman»">.Ц<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">{<span Courier New"; mso-bidi-font-family:«Times New Roman»">Ц<span Courier New";mso-bidi-font-family:«Times New Roman»;mso-ansi-language: EN-US">}][<span Courier New";mso-hansi-font-family:«Courier New»; mso-ansi-language:EN-US;mso-char-type:symbol;mso-symbol-font-family:Symbol">L<span Courier New";mso-bidi-font-family:«Times New Roman»; mso-ansi-language:EN-US">]<span Courier New"; mso-bidi-font-family:«Times New Roman»"><span Courier New";mso-bidi-font-family:«Times New Roman»">
<span Courier New";mso-bidi-font-family:«Times New Roman»">Т
<span Courier New";mso-bidi-font-family:«Times New Roman»">–
<span Courier New"; mso-bidi-font-family:«Times New Roman»">ТЕРМ
<span Courier New";mso-bidi-font-family:«Times New Roman»">О
<span Courier New";mso-bidi-font-family:«Times New Roman»">–
<span Courier New"; mso-bidi-font-family:«Times New Roman»">ОПЕРАНД
<span Courier New";mso-bidi-font-family:«Times New Roman»">Б
<span Courier New";mso-bidi-font-family:«Times New Roman»">–
<span Courier New"; mso-bidi-font-family:«Times New Roman»">БУКВА
<span Courier New";mso-bidi-font-family:«Times New Roman»">Ц
<span Courier New";mso-bidi-font-family:«Times New Roman»">–
<span Courier New"; mso-bidi-font-family:«Times New Roman»">ЦИФРА
<span Courier New";mso-bidi-font-family:«Times New Roman»">ДБЗ
<span Courier New";mso-bidi-font-family:«Times New Roman»">–
<span Courier New"; mso-bidi-font-family:«Times New Roman»">ДРОБНОЕ БЕЗ ЗНАКА
<span Courier New";mso-hansi-font-family: «Courier New»;mso-char-type:symbol;mso-symbol-font-family:Symbol">L
<span Courier New";mso-bidi-font-family:«Times New Roman»"><span Courier New";mso-bidi-font-family: «Times New Roman»;mso-ansi-language:EN-US">–
<span Courier New";mso-bidi-font-family:«Times New Roman»"><span Courier New"; mso-bidi-font-family:«Times New Roman»">КОНЕЦ СТРОКИ (пусто)
<span Courier New";mso-bidi-font-family:«Times New Roman»">**
<span Courier New";mso-bidi-font-family:«Times New Roman»">–
<span Courier New"; mso-bidi-font-family:«Times New Roman»">ВОЗВЕДЕНИЕ В СТЕПЕНЬ
<span Courier New";mso-bidi-font-family:«Times New Roman»">
<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-bidi-font-family:«Times New Roman»;mso-font-kerning:14.0pt; mso-ansi-language:EN-US;mso-fareast-language:RU;mso-bidi-language:AR-SA"><span Courier New";mso-bidi-font-family:«Times New Roman»">Классификацияграмматики.
Данная грамматика G[<ОПЕРАТОР>],согласно классификации Хомского, является контекстно-свободной, так как праваячасть каждой редукции начинается либо с терминального символа, либо снетерминального, принадлежащего объединённому словарю.
A <span Times New Roman";mso-hansi-font-family:«Times New Roman»; mso-ansi-language:EN-US;mso-char-type:symbol;mso-symbol-font-family:Symbol">®
a, A<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-ansi-language:EN-US;mso-char-type: symbol;mso-symbol-font-family:Symbol">ÎVn, a<span Times New Roman";mso-hansi-font-family: «Times New Roman»;mso-ansi-language:EN-US;mso-char-type:symbol;mso-symbol-font-family: Symbol">ÎV<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-ansi-language:EN-US;mso-char-type: symbol;mso-symbol-font-family:Symbol">*.Грамматика G[<ОПЕРАТОР>]неявляется автоматной, так как не все её редукции начинаются с терминальногосимвола. По этой же причине данная грамматика не является S-грамматикой.
<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-bidi-font-family:«Times New Roman»;mso-font-kerning:14.0pt; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA"><span Courier New";mso-bidi-font-family:«Times New Roman»">Методанализа.
Для данной грамматикиреализован разбор методом рекурсивного спуска, поскольку она относится к классуконтекстно-свободных.
Идеяметода состоит в том, что каждому нетерминальному символу ставится всоответствие определённая программная единица (функция), которая распознаётцепочку, порождаемую этим нетерминалом.
Этипроцедуры и функции вызываются в соответствии с правилами грамматики и иногдавызывают сами себя.
Данныйметод реализован на языке C++, поскольку он обладаетрекурсивными возможностями.
<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-bidi-font-family:«Times New Roman»;mso-font-kerning:14.0pt; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA"><span Courier New";mso-bidi-font-family:«Times New Roman»">Диагностикаи нейтрализация ошибок.
Для данной грамматикипроизводится только диагностика и нейтрализация ошибок. Исправление ошибок непроизводится.
Нейтрализация ошибокосуществляется по методу Айронса, то есть, спускаясь по синтаксическому деревубез возврата по контексту, при обнаружении тупиковой ситуации отбрасываются телитеры (символы), которые привели в тупиковую ситуацию и разбор продолжается.
<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-bidi-font-family:«Times New Roman»;mso-font-kerning:14.0pt; mso-ansi-language:EN-US;mso-fareast-language:RU;mso-bidi-language:AR-SA"><span Courier New";mso-bidi-font-family:«Times New Roman»">Тестирование.
<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
Протокол работысинтаксического распознавателя вычисляемого оператора перехода языка FORTRAN.
<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
GOTO A+B-DD**(CC/(23+34**R))+Y*((C))
<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
AB — Проверка наАрифметическое Выражение.
SCAN — Сканирование.Текущий символ 'A' с кодом 65.
T — Проверка наТерм.
O — Проверка наОперанд.
IDENT — Проверка на Идентификатор с символа A.
SCAN — Сканирование.Текущий символ '+' с кодом 43.
AB — Проверка наАрифметическое Выражение.
SCAN — Сканирование.Текущий символ 'B' с кодом 66.
T — Проверка наТерм.
O — Проверка наОперанд.
IDENT — Проверка на Идентификатор с символа B.
SCAN — Сканирование.Текущий символ '-' с кодом 45.
AB — Проверка наАрифметическое Выражение.
SCAN — Сканирование.Текущий символ 'D' с кодом 68.
T — Проверка наТерм.
O — Проверка наОперанд.
IDENT — Проверка на Идентификатор с символа D.
SCAN — Сканирование.Текущий символ 'D' с кодом 68.
SCAN — Сканирование.Текущий символ '*' с кодом 42.
SCAN — Сканирование.Текущий символ '*' с кодом 42.
SCAN — Сканирование.Текущий символ '(' с кодом 40.
T — Проверка наТерм.
O — Проверка на Операнд.
AB — Проверка наАрифметическое Выражение.
SCAN — Сканирование.Текущий символ 'C' с кодом 67.
T — Проверка наТерм.
O — Проверка наОперанд.
IDENT — Проверка на Идентификатор с символа C.
SCAN — Сканирование.Текущий символ 'C' с кодом 67.
SCAN — Сканирование.Текущий символ '/' с кодом 47.
SCAN — Сканирование.Текущий символ '(' с кодом 40.
T — Проверка наТерм.
O — Проверка наОперанд.
AB — Проверка наАрифметическое Выражение.
SCAN — Сканирование.Текущий символ '2' с кодом 50.
T — Проверка наТерм.
O — Проверка наОперанд.
IDENT — Проверка на Идентификатор с символа 2.
FLOAT — Проверка наДробное Без Знака с цифры 2.
SCAN — Сканирование.Текущий символ '3' с кодом 51.
SCAN — Сканирование.Текущий символ '+' с кодом 43.
AB — Проверка наАрифметическое Выражение.
SCAN — Сканирование.Текущий символ '3' с кодом 51.
T — Проверка наТерм.
O — Проверка наОперанд.
IDENT — Проверка на Идентификатор с символа 3.
FLOAT — Проверка наДробное Без Знака с цифры 3.
SCAN — Сканирование.Текущий символ '4' с кодом 52.
SCAN — Сканирование.Текущий символ '*' с кодом 42.
SCAN — Сканирование.Текущий символ '*' с кодом 42.
SCAN — Сканирование.Текущий символ 'R' с кодом 82.
T — Проверка наТерм.
O — Проверка наОперанд.
IDENT — Проверка на Идентификатор с символа R.
SCAN — Сканирование.Текущий символ ')' с кодом 41.
SCAN — Сканирование.Текущий символ ')' с кодом 41.
SCAN — Сканирование.Текущий символ '+' с кодом 43.
AB — Проверка наАрифметическое Выражение.
SCAN — Сканирование.Текущий символ 'Y' с кодом 89.
T — Проверка наТерм.
O — Проверка наОперанд.
IDENT — Проверка на Идентификатор с символа Y.
SCAN — Сканирование.Текущий символ '*' с кодом 42.
SCAN — Сканирование.Текущий символ '(' с кодом 40.
T — Проверка наТерм.
O — Проверка наОперанд.
AB — Проверка наАрифметическое Выражение.
SCAN — Сканирование.Текущий символ '(' с кодом 40.
T — Проверка наТерм.
O — Проверка наОперанд.
AB — Проверка наАрифметическое Выражение.
SCAN — Сканирование.Текущий символ 'C' с кодом 67.
T — Проверка наТерм.
O — Проверка наОперанд.
IDENT — Проверка на Идентификатор с символа C.
SCAN — Сканирование.Текущий символ ')' с кодом 41.
SCAN — Сканирование.Текущий символ ')' с кодом 41.
SCAN — Сканирование.Текущий символ NULL скодом 0.
<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
GOTO A
<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
AB — Проверка наАрифметическое Выражение.
SCAN — Сканирование.Текущий символ 'A' с кодом 65.
T — Проверка наТерм.
O — Проверка наОперанд.
IDENT — Проверка на Идентификатор с символа A.
SCAN — Сканирование.Текущий символ NULL с кодом 0.
<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
<span Arial",«sans-serif»;mso-fareast-font-family: «Times New Roman»;mso-bidi-font-family:«Times New Roman»;mso-font-kerning:14.0pt; mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language:AR-SA"><span Courier New";mso-bidi-font-family:«Times New Roman»">Листингпрограммы.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
// FILE «KURSOVIK.CPP».
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
// ВАРИАHТ № 3.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
// Операторперехода вычисляемый языка FORTRAN.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
// Кафедра: АСУ.
// Группа: А-513.
// Студент: Борзов Андрей Hиколаевич.
// Преподаватели:кандидат технических наук, доцент Шорников ЮрийВладимирович,
// ассистентПанова Вера Борисовна.
// Дата: 29 апреля 1997г.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
// Подключаемые файлы.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
#include<string.h>
#include<conio.h>
#include<stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<ctype.h>
#include<time.h>
#include«keyboard.h»
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
// Макроопределения.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
#define ERROR 0 //Код ошибки.
#define COL_STR 20 // Максимальноеколичество строк.
#define STR_LEN 35 // Длина строки.
#define MAX_STR_LEN 255 //Максимальная длина строки.
#define FILENAME «TEST.TXT» // Имя файла, открываемого поумолчанию.
#define YES 1
#define NO 2
#define OK 3
//#defineTEST //Определено, если включен отладочный режим.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
// Прототипы функций.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
int I_ReadKey(void); //Опрос клавиатуры.
void Welcome(void); // Экран пристарте программы.
void Menu(void); // Меню.
void Help(void); // Помощь.
void MyExit(int=0); // Корректныйвыход из программы.
void Beep(int=500,int=100); //Звуковой сигнал.
void Usage(void); //Использование программы.
int OpenFile(void); //Открытие файла.
void DrawBox(int,int,int,int,char*); // Рисует рамку сзаголовком.
void PrintText(void); // Печатаетосновной текст.
void Screen(void); //Перерисовка экрана.
void Compile(void); // Компиляция.
void Message(int); // Выводсообщений об ошибках.
void MyPuts(char*,int); //Аналог puts(char*);.
void Language(void); // Язык оператора.
void Grammar(void); // Грамматикаязыка.
void GetFilename(void); //Запрос имени файла для открытия.
int ScanStr(char*); //Поиск GOTO.
int Scaner(char*); // Обработкастроки.
void Scan(void); //Сканирование следующего символа.
void Delspace(char*); //Удаление ненужных пробелов в строке.
int AB(void); //Реализация нетерминала <АВ>.
int T(void); // Реализациянетерминала <Т>.
int O(void); // Реализация нетерминала<О>.
int IDENT(void); // Реализациянетерминала .
int FLOAT(void); // Реализациянетерминала .
void Error(int=0,char* =""); //Обработка ошибки.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
// Глобальные переменные.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
char filename[MAX_STR_LEN]; // Имя файла.
char *text[COL_STR+1]; // Массив указателей настроки текста.
char screen[4096]; // Буфер подкопию экрана.
char mes[21][20][80]; //Массив под сообщения об ошибках.
char nx; //Текущий символ.
int pos; //Текущая позиция в строке.
char STR[80]; //Сканируемая строка.
int ERR1; //Счетчик страниц в массиве ошибок.
int ERR2; //Счетчик строк в массиве ошибок.
FILE *errors; //Дескриптор файла.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
// Функция MAIN.
//<span Times New Roman"; mso-hansi-font-family:«Times New Roman»;mso-char-type:symbol;mso-symbol-font-family: Symbol;mso-no-proof:yes">¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾¾
voidmain(int argc,char* argv[])
{
textcolor(LIGHTGRAY);
textbackground(BLACK);
_setcursortype(_NOCURSOR);
clrscr();
if(argc>2)
{
Usage();
MyExit();
}
if(argc==2)
strcpy(filename,argv[1]);
else
{
Welcome();
<span