Компьютерные и информационные системы в образовании. Контрольная работа. Педагогика.

Компьютерные и информационные системы в образовании. Контрольная работа. Педагогика.




👉🏻👉🏻👉🏻 ВСЯ ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻



























































Вы можете узнать стоимость помощи в написании студенческой работы.


Помощь в написании работы, которую точно примут!

Похожие работы на - Компьютерные и информационные системы в образовании

Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе


Скачать Скачать документ
Информация о работе Информация о работе

Нужна качественная работа без плагиата?

Не нашел материал для своей работы?


Поможем написать качественную работу Без плагиата!

Конвертер программы с подмножества языка Си в Паскаль
с использованием LL(1) метода синтаксического анализа (выражения)"


Выполнили студенты группы ИАС-00 Мардасова У. А.
Шалудько В. А.


Кемеровский Государственный Университет, Факультет
Информационных Технологий


При
знакомстве с языком СИ, особенно после изучения Паскаля и Бейсика, погружение в
детали его изобразительных средств может затушевать важную мысль: хотя на СИ
можно написать практически любую прикладную программу, он изначально для этого
не предназначен. СИ является результатом эволюционного развития языков создания
системных программных средств. Если в прикладном программировании эволюция шла
от Фортрана к Алголу, Коболу, Паскалю и т.д., то в системном - от Ассемблеров,
привязанных к архитектуре ЭВМ, к СИ, для которого созданы трансляторы, делающие
его хоть и независимым от архитектуры, но не меняющим основного предназначения.


С
помощью СИ можно сделать то, что на Паскале сделать невозможно (или почти
невозможно) - например, написать фрагмент операционной системы (или новую
операционную систему), утилиты и т.п. Так, ряд трансляторов с Паскаля написаны
на СИ; обратное невозможно представить. В то же время, не раз отмечалось, что
прикладные программы, написанные на Паскале, отличаются большей надежностью,
чем написанные на СИ; их легче читать, передавать от одного программиста
другому для совершенствования и сопровождения. Это связано с тем, что Паскаль
содержит существенно больше ограничений и является языком более высокого уровня
с сильной типизацией данных. Для языка же, который предназначен для разработки
системного программного обеспечения, чем меньше ограничений, тем лучше; так, в
СИ возможны неявные преобразования всех базовых типов данных и указателей друг
в друга, что крайне желательно при создании системных средств, но при
невнимательности программиста приводит к ошибкам, не улавливаемым транслятором
с СИ (Паскаль же подобные недопустимые операции пресекает немедленно).


Разумеется,
сказанное выше не следует абсолютизировать. Программисты, привыкшие к СИ,
успешно пишут на нем программы различных классов. Это касается не только СИ -
вспомните об экспертных системах, написанных на Бейсике. В то же время, при
массовом программировании придерживаться "разделение труда" между
языками представляется более естественным.


Широкой
популярности Паскаля среди программистов способствуют следующие причины:


Благодаря
своей компактности, удачному первоначальному описанию Паскаль оказался
достаточно лёгким для изучения.


Язык
программирования Паскаль отражает фундаментальные и наиболее важные концепции
(идеи) алгоритмов в очевидной и легко воспринимаемой форме, что предоставляет
программисту средства, помогающие проектировать программы.


Язык
Паскаль позволяет чётко реализовать идеи структурного программирования и
структурной организации данных.


Язык
Паскаль сыграл большую роль в развитии методов аналитического доказательства
правильности программ и позволил реально перейти от методов отладки программ к
системам автоматической проверки правильности программ.


Применение
языка Паскаль значительно подняло "планку" надёжности разрабатываемых
программ за счёт требований Паскаля к описанию используемых в программе
переменных, проверки согласованности программы при компиляции без её
выполнения.


Использование в Паскале простых и гибких структур
управления: ветвлений, циклов.


С
другой стороны язык программирования СИ - это универсальный язык с богатым
набором операторов и компактным способом записи выражений. Благодаря гибкости,
выразительности и компактности своей конструкции СИ завоевал наибольшую
популярность в среде профессиональных программистов и широко используется при
разработке системных и прикладных программ.


Язык
СИ представляет собой удачный компромисс между желанием располагать теми
возможностями, которые обычно предоставляют программисту столь понятные и удобные
языки высокого уровня, и стремлением эффективно использовать особенности
компьютера. Кроме набора средств, присущих современным языкам программирования
высокого уровня (структурность, модульность, определяемые типы данных) в него
включены средства для программирования "почти" на уровне ассемблера
(использование указателей, побитовые операции, операции сдвига). Большой набор
операторов позволяет писать компактные и эффективные программы. Однако, такие
мощные средства требуют от программиста осторожности, аккуратности и хорошего
знания языка со всеми его преимуществами и недостатками. В отличие от языков
программирования типа Паскаль, требующих жесткой дисциплины программирования
ограничивающих свободу программиста, содействующих устранению многих ошибок еще
на стадии их трансляции, язык СИ предоставляет программисту наибольшую свободу.
Однако, ответственность за корректность программ при этом полностью ложится на
программиста.


В
настоящее время имеется большое количество систем программирования на СИ для разных
типов компьютеров. Разработано много библиотек модулей, инструментальных
средств разработки и отладки, облегчающих создание новых программ. Программы на
СИ обладают высокой мобильностью, без каких либо изменений они переносятся,
транслируются и выполняются на машинах различного типа.


В
рамках учебного проекта реализована программная система, называемая в
дальнейшем конвертором, позволяющая автоматизировать процесс преобразования
программ на Паскале в программы на языке СИ. На вход конвертора подается
синтаксически правильная программа на Паскале, на выходе его формируется
эквивалентная ей программа на языке СИ.


Задача
разработки конвертора относится к классу задач автоматизации реинженеринга
программ с устаревших языков на современные языки программирования и новые
платформы. Разработка конвертора для языка Паскаль является достаточно
трудоёмкой в силу особенностей синтаксиса и семантики языка Паскаль.


Язык
Паскаль не допускает использования принципов умолчаний и сокращений, требует
строгого соблюдения соответствия типов данных, в нём жёстко регламентированы
структура и место описания программных объектов.


В
силу выше сказанного, даже ручной перевод программы на Паскале на язык СИ
требует от программиста приложения значительных интеллектуальных усилий, а
реализация конвертора для языка Паскаль возможна лишь при наличии существенных
временных и материальных ресурсов. Помимо синтаксических ограничений входная
программа конвертора имеет ряд чисто семантических ограничений, связанных с
реализацией собственно конвертора. Перечислим основные из них:


Ограниченное
использование типов данных, в полном объёме поддерживаются только
арифметические типы данных.


Вложенность
блоков, в которых используются одноименные объекты, не должна превышать двух
уровней.


Процедурные
блоки не должны быть внутри BEGIN-блоков, вложенность процедурных блоков не
ограничивается.


Допускается
использовать только одномерные массивы с открытой правой границей (динамические
массивы) в качестве параметров процедурных блоков; при этом адресуются элементы
массива в Паскаль программе, начиная с нулевого элемента.


Ограниченное использование смешения различных типов
данных.


Конструкция
языка, задающая порядок выполнения действия над элементами данных, называется
выражением. Выражение состоит из операндов (operand - элемент данных,
участвующий в операции), - величин и выражений, над которыми производится
операция (константы и переменные всех типов, обращения к функциям); круглых
скобок и знаков операций. Операции определяют действия, которые надо выполнить
над операндами. Например, в выражении (X+Y-10) X, Y и 10 - операнды; а
"+" и "-" - знаки операций сложения и вычитания.


В
простейшем случае выражение может состоять из одной переменной или константы.
Круглые скобки ставятся так же, как и в обычных арифметических выражениях для
управления ассоциативностью и порядком выполнения операций.


Операции
в языке Паскаль делятся на арифметические, отношения, логические (булевские),
операцию @, строковые и др. Выражения соответственно называются арифметическими,
отношения, булевскими, строковыми и т.д. в зависимости от того, какого типа
операнды и операции в них используются.


Тип
значения, вычисляемого с помощью выражения, определяется типом его операндов и
знаками выполняемых над ними операций.


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


Например,
-А - унарная операция, Х+У - бинарная.


Арифметические
выражения и операции.


Арифметическим
называется выражение, составленное из операндов арифметического типа и
использующее только знаки арифметических операций и круглые скобки. Порядок
вычисления определяется скобками и старшинством операций.


Арифметическое
выражение порождает целое или действительное (вещественное) значение. Наиболее
простыми формами арифметических выражений являются:


Целая
или действительная константа без знака;


Целая
или действительная переменная;


Элемент
массива целого или действительного типа;


Функция,
принимающая целое или действительное значение.


Значение
переменной или элемента массива должно быть определено до их появления в
арифметическом выражении. Другие арифметические выражения составляются из
вышеперечисленных простых форм путем применения круглых скобок и арифметических
операций.


Арифметические
операции выполняют арифметические действия в выражениях над значениями
операндов целочисленных и вещественных типов. Арифметические операции языка
Паскаль представлены в таблице1.


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


В
языке Паскаль операции отношения и рассмотренные ниже булевские операции более
важны при написании программ, чем в других языках, так как они интенсивно
используются для реализации разветвляющихся и циклических алгоритмов. В таблице
2 приведены операции отношения, допустимые в версии языка Паскаль для ПЭВМ.


Сравниваемые
величины могут принадлежать к любому скалярному или перечисляемому типу данных.
Результат всегда имеет булевский тип и принимает одно из двух значений: True
(истина) или False (ложь).


Результатом
выполнения логического (булевского) выражения является логическое значение True
или False. Операндами служат данные только булевского типа.


Простейшими
видами логических выражений являются следующие:


Другие логические выражения строятся из
вышеперечисленных путем применения логических операций и круглых скобок. Список
логических операций приведен в таблице 3.


С
помощью операции @ можно создать указатель на переменную. В таблице 4 показаны
операнд и типы результата.


Ссылка на
переменную, процедуру или идентификатор функции

Операция
@ является унарной. В качестве операнда может использоваться ссылка на
переменную, процедуру или идентификатор функции. После выполнения операнду
возвращается соответствующий указатель, тип которого является таким же, как тип
указателя nil, и, следовательно, его можно присвоить любому указателю
переменной.


Конструкции,
включающие константы (литералы), переменные, знаки операций, скобки для
управления порядком выполнения операций, обращения к функциям, называют
выражениями.


Если
в выражениях встречаются операнды различных типов, то они преобразуются к
общему типу в соответствии с определенными правилами:


Переменные
типа char интерпретируются как целые без знака (unsigned);


Переменные
типа short автоматически преобразуются в int; если один из операндов имеет тип
unsigned, то другой (другие) также преобразуется к типу unsigned и результат
имеет тип unsigned;


Если
один из операндов имеет тип int, то другой (другие) также преобразуется к типу
int и результат имеет тип int;


Если
один из операндов имеет тип char, то другой (другие) также преобразуется к типу
char и результат имеет тип char;


Во
время операции присваивания значения правой части преобразуются к типу левой
части, который и становится типом результата;


В
процессе преобразования int в char лишние 8 бит просто отбрасываются.


Кроме
того, существует возможность точно указывать требуемый тип данных, к которому
необходимо привести некоторую величину (в скобках перед этой величиной). Скобки
и имя типа вместе образуют операцию, называемую приведением типов.


Комбинация
знаков операций и операндов, результатом которой является определенное
значение, называется выражением. Знаки операций определяют действия, которые
должны быть выполнены над операндами. Каждый операнд в выражении может быть
выражением. Значение выражения зависит от расположения знаков операций и
круглых скобок в выражении, а также от приоритета выполнения операций.


В
языке СИ присваивание также является выражением, и значением такого выражения
является величина, которая присваивается.


При
вычислении выражений тип каждого операнда может быть преобразован к другому
типу. Преобразования типов могут быть неявными, при выполнении операций и
вызовов функций, или явными, при выполнении операций приведения типов.


Операнд
- это константа, литерал, идентификатор, вызов функции, индексное выражение,
выражение выбора элемента или более сложное выражение, сформированное
комбинацией операндов, знаков операций и круглых скобок. Любой операнд, который
имеет константное значение, называется константным выражением. Каждый операнд
имеет тип.


Выражения
со знаками операций могут участвовать в выражениях как операнды. Выражения со
знаками операций могут быть унарными (с одним операндом), бинарными (с двумя
операндами) и тернарными (с тремя операндами).


Унарное
выражение состоит из операнда и предшествующего ему знаку унарной операции и
имеет следующий формат:


Бинарное
выражения состоит из двух операндов, разделенных знаком бинарной операции:


операнд1
знак-бинарной-операции операнд2


Тернарное
выражение состоит из трех операндов, разделенных знаками тернарной операции (?)
и (:), и имеет формат:


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


В
языке Си имеются следующие унарные операции:


-арифметическое
отрицание (отрицание и дополнение);


~
побитовое логическое отрицание (дополнение);


Унарные
операции выполняются справа налево.


Операции
увеличения и уменьшения увеличивают или уменьшают значение операнда на единицу
и могут быть записаны как справа так и слева от операнда. Если знак операции
записан перед операндом (префиксная форма), то изменение операнда происходит до
его использования в выражении. Если знак операции записан после операнда
(постфиксная форма), то операнд вначале используется в выражении, а затем
происходит его изменение.


В
отличие от унарных, бинарные операции, список которых приведен в табл.7,
выполняются слева направо.


Поразрядное
исключающее ИЛИ с присваиванием

К
этому классу операций относятся операции умножения (*), деления (/) и получение
остатка от деления (%). Операндами операции (%) должны быть целые числа.
Отметим, что типы операндов операций умножения и деления могут отличаться, и
для них справедливы правила преобразования типов. Типом результата является тип
операндов после преобразования.


Операция
умножения (*) выполняет умножение операндов. Операция деления (/) выполняет
деление первого операнда на второй. Если две целые величины не делятся нацело,
то результат округляется в сторону нуля. При попытке деления на ноль выдается
сообщение во время выполнения. Операция остаток от деления (%) дает остаток от
деления первого операнда на второй.


К
аддитивным операциям относятся сложение (+) и вычитание (-). Операнды могут
быть целого или плавающего типов. В некоторых случаях над операндами аддитивных
операций выполняются общие арифметические преобразования. Однако
преобразования, выполняемые при аддитивных операциях, не обеспечивают обработку
ситуаций переполнения и потери значимости. Информация теряется, если результат
аддитивной операции не может быть представлен типом операндов после
преобразования. При этом сообщение об ошибке не выдается.


Результатом
выполнения операции сложения является сумма двух операндов. Операнды могут быть
целого или плавающего типа или один операнд может быть указателем, а второй -
целой величиной.


Операция
вычитания (-) вычитает второй операнд из первого. Возможна следующая комбинация
операндов:


1.
Оба операнда целого или плавающего типа.


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


К
логическим операциям относятся операция логического И (&&) и операция
логического ИЛИ (||). Операнды логических операций могут быть целого типа,
плавающего типа или типа указателя, при этом в каждой операции могут
участвовать операнды различных типов.


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


Логические
операции не вызывают стандартных арифметических преобразований. Они оценивают
каждый операнд с точки зрения его эквивалентности нулю. Результатом логической
операции является 0 или 1, тип результата int.


Операция
логического И (&&) вырабатывает значение 1, если оба операнда имеют
нулевые значения. Если один из операндов равен 0, то результат также равен 0.
Если значение первого операнда равно 0, то второй операнд не вычисляется.


Операция
логического ИЛИ (||) выполняет над операндами операцию включающего ИЛИ. Она
вырабатывает значение 0, если оба операнда имеют значение 0, если какой-либо из
операндов имеет ненулевое значение, то результат операции равен 1. Если первый
операнд имеет ненулевое значение, то второй операнд не вычисляется.


Операция последовательного вычисления


Операция
последовательного вычисления обозначается запятой (,) и используется для
вычисления двух и более выражений там, где по синтаксису допустимо только одно
выражение. Эта операция вычисляет два операнда слева направо. При выполнении
операции последовательного вычисления, преобразование типов не производится.
Операнды могут быть любых типов. Результат операции имеет значения и тип
второго операнда. Отметим, что запятая может использоваться также как символ
разделитель, поэтому необходимо по контексту различать, запятую, используемую в
качестве разделителя или знака операции.


В
языке СИ имеется одна тернарная операция - условная операция, которая имеет
следующий формат:


Операнд-1
должен быть целого или плавающего типа или быть указателем. Он оценивается с
точки зрения его эквивалентности 0. Если операнд-1 не равен 0, то вычисляется
операнд-2 и его значение является результатом операции. Если операнд-1 равен 0,
то вычисляется операнд-3 и его значение является результатом операции. Следует
отметить, что вычисляется либо операнд-2, либо операнд-3, но не оба. Тип
результата зависит от типов операнда-2 и операнда-3, следующим образом.


1.
Если операнд-2 или операнд-3 имеет целый или плавающий тип (отметим, что их
типы могут отличаться), то выполняются обычные арифметические преобразования.
Типом результата является тип операнда после преобразования.


2.
Если операнд-2 и операнд-3 имеют один и тот же тип структуры, объединения или
указателя, то тип результата будет тем же самым типом структуры, объединения
или указателя.


3.
Если оба операнда имеют тип void, то результат имеет тип void.


4.
Если один операнд является указателем на объект любого типа, а другой операнд
является указателем на vold, то указатель на объект преобразуется к указателю
на vold, который и будет типом результата.


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


Операции
увеличения (++) и уменьшения (--) являются унарными операциями присваивания.
Они соответственно увеличивают или уменьшают значения операнда на единицу. Операнд
может быть целого или плавающего типа или типа указатель и должен быть
модифицируемым. Операнд целого или плавающего типа увеличиваются (уменьшаются)
на единицу. Тип результата соответствует типу операнда. Операнд адресного типа
увеличивается или уменьшается на размер объекта, который он адресует. В языке
допускается префиксная или постфиксная формы операций увеличения (уменьшения),
поэтому значения выражения, использующего операции увеличения (уменьшения)
зависит от того, какая из форм указанных операций используется.


Если
знак операции стоит перед операндом (префиксная форма записи), то изменение
операнда происходит до его использования в выражении и результатом операции
является увеличенное или уменьшенное значение операнда.


В
том случае если знак операции стоит после операнда (постфиксная форма записи),
то операнд вначале используется для вычисления выражения, а затем происходит
изменение операнда.


Определим
выражение в виде БНФ для языка С\С++ и Turbo Pascal 7.0.


В::=
++i | --i | i++ | i-- | B*B | B/B | B%B | B+B | B-B | BB | B>=B
| B<=B | B!=B | B==B | B&&B | B|| | (k)B | B?B:B | i=B | i*=B | i-=B
| i+=B | i/=B | i%=B | i | i(S) | (B)


В::=П
| П=П | П<П | П> П | П<> П | П>= П | П<= П


C::=M | C*M | C/M | C div M | C mod M | C and M


Теперь
приведём данные БНФ к КС-грамматике: G=


T(C\C++)={i, ++, --, +, -, ==, !=, <, >, <=, >=, *=, -=,
+=, /=, %=, =, *, /, %, (, ), ?, :, ,, &&, ||}


T(TP)={ i, +, -, =, <>, <, >, <=, >=, *, /, div,
mod, and, or, (, ), ,}


Устранив
цепные правила, левую рекурсию, получим LL(1)-грамматику.


Так
как данные LL(1)-грамматики являются грамматиками Грейбаха, то по ним можно
построить управляющие таблицы.


Управляющая
таблица для выражения на языке С\С++


Управляющая
таблица для выражения на языке Turbo Pascal 7.0


Выберете
язык: 1 - СИ\СИ++ 2 - Turbo Pascal 7.0


55
12 25 1 31 1 37 53 53 13 53 59 60


Выберете
язык: 1 - СИ\СИ++ 2 - Turbo Pascal 7.0


Выберете
язык: 1 - СИ\СИ++ 2 - Turbo Pascal 7.0


3
23 32 19 5 14 23 32 16 25 23 32 19 39


Выберете
язык: 1 - СИ\СИ++ 2 - Turbo Pascal 7.0


/*---------------------------ВВОД ВЫРАЖЕНИЯ------------------------------*/


printf("\t\t\tКУРСОВАЯ РАБОТА ПО ЯПМТ\n");


printf("Выберете язык: 1 - СИ\\СИ++ 2 - Turbo Pascal 7.0\n");


printf("Напишите
выражение на языке С:\n");


printf("Напишите
выражение на языке TP:\n");


/*-----------------------------------------------------------------------*/


/*--------------------------ИНДИФИКАТОР----------------------------------*/


int i,j,k,d(0),i1,d1=0,z(0),chiclo(0),di(0);


char
b[m]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',


'p','q','r','s','t','u','v','w','x','y','z','A','B','C','D',


'F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T',


char c[g]={'1','2','3','4','5','6','7','8','9','0','.'};


if(s1[i]==c[j]) {chiclo=chiclo++;break;}


if(d1==1||d==1||chiclo==l-be+1&&z==0) {z=1;/*printf("DA");*/}
else {z=0;/*printf("NET");*/}


/*--------------------КОНЕЦ
ИНДИФИКАТОРА---------------------------------*/


/*--------------------------LL(1)
- АНАЛИЗАТОР-----------------------------*/


int
tab[12][29]={{55,0,54,0,57,56,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},


{11,0,1,0,21,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},


{9,37,0,0,8,7,22,23,24,25,26,28,27,30,29,32,31,34,33,35,0,0,2,3,4,5,6,52,37},


{14,0,12,18,17,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},


{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36,0,0,0,0,0,0,0,0},


{0,53,0,0,0,0,38,39,40,41,42,44,43,45,46,48,47,50,49,51,0,53,0,0,0,0,0,0,53},


{0,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},


{0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},


{0,19,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},


{0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,59},


{0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},


{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60}};


printf("\tЗаменить(В1)\tСдвиг\n");vl[j]=1;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=2;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=3;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=4;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=5;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=8;break;


printf("\tЗаменить(В')\tСдвиг\n");vl[j]=7;break;


printf("\tЗаменить(В')\tСдвиг\n");vl[j]=8;break;


printf("\tЗаменить(S1,S)\tСдвиг\n");vl[j]=9;break;


printf("\tЗаменить(В')\tСдвиг\n");vl[j]=10;break;


printf("\tЗаменить(В2)\tСдвиг\n");vl[j]=11;break;


printf("\tЗаменить(C,В1)\tСдвиг\n");vl[j]=12;break;


printf("\tЗаменить(В')\tСдвиг\n");vl[j]=13;break;


printf("\tЗаменить(C,В2)\tСдвиг\n");vl[j]=14;break;


printf("\tЗаменить(C,C1)\tСдвиг\n");vl[j]=15;break;


printf("\tЗаменить(В')\tСдвиг\n");vl[j]=16;break;


printf("\tЗаменить(C,C1)\tСдвиг\n");vl[j]=17;break;


printf("\tЗаменить(C2)\tСдвиг\n");vl[j]=18;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=19;break;


printf("\tЗаменить(C1)\tСдвиг\n");vl[j]=20;break;


printf("\tЗаменить(C1)\tСдвиг\n");vl[j]=21;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=22;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=23;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=24;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=25;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=26;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=27;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=28;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=29;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=30;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=31;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=32;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=33;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=34;break;


printf("\tЗаменить(В3,В)\tСдвиг\n");vl[j]=35;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=36;break;


printf("\tВытолкнуть\tДержать\n");vl[j]=37;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=38;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=39;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=40;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=41;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=42;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=43;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=44;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=45;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=46;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=47;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=48;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=49;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=50;break;


printf("\tЗаменить(В3,В)\tСдвиг\n");vl[j]=51;break;


printf("\tЗаменить(В',В)\tСдвиг\n");vl[j]=52;break;


printf("\tВытолкнуть\tДержать\n");vl[j]=53;break;


printf("\tЗаменить(S',В1)\tСдвиг\n");vl[j]=54;break;


printf("\tЗаменить(S',В2)\tСдвиг\n");vl[j]=55;break;


printf("\tЗаменить(S',C1)\tСдвиг\n");vl[j]=56;break;


printf("\tЗаменить(S',C1)\tСдвиг\n");vl[j]=57;break;


printf("\tЗаменить(S)\tСдвиг\n");vl[j]=58;break;


printf("\tВытолкнуть\tДержать\n");vl[j]=59;break;


case 60: printf("ДОПУСТИТЬ\n");i=1;vl[j]=60;break;


case 0: printf("Отвергнуть\n");i=2;vl[j]=0;break;
while(tab[z[z1]][a[v]]!=0||tab[z[z1]][a[v]]!=60);


/*-------------------------------------------------------------------------*/


/*--------------------------ТЕРМИНАЛЬНЫЕ СИМВОЛЫ---------------------------*/


char
term[t]={'+','-','&','|','>','<','=','\n','!','/','*',':','?','%','(',')',','};


if(s==term[k]||s=='d'||s=='i'||s=='v'||s=='m'||s=='o'||s=='r'||s=='a'||s=='n')


/*---------------------КОНЕЦ
ТЕРМИНАЛЬНЫЕ СИМВОЛЫ--------------------------*/


/*-----------------------ДЕСКРИПТОРНЫЙ ТЕКСТ---------------------------------*/


case '%': if(s1[i+1]=='='){a[w]=27;i++;}else a[w]=6;break;


case '*': if(s1[i+1]=='='){a[w]=23;i++;}else a[w]=7;break;


case '/': if(s1[i+1]=='='){a[w]=26;i++;}else a[w]=8;break;


case '=': if(s1[i+1]=='='){a[w]=16;i++;}else a[w]=22;break;


case '!': if(s1[i+1]=='=')a[w]=15;i++;break;


case '>': if(s1[i+1]=='='){a[w]=13;i++;}else a[w]=12;break;


case '<': if(s1[i+1]=='='){a[w]=14;i++;}else a[w]=11;break;


case '+': if(s1[i+1]=='+'){a[w]=4;i++;}else
if(s1[i+1]=='='){a[w]=24;i++;}else a[w]=9;break;


case '-': if(s1[i+1]=='-'){a[w]=5;i++;}else if(s1[i+1]=='='){a[w]=25;i++;}else
a[w]=10;break;


case '&': if(s1[i+1]=='&')a[w]=18;i++;break;


case '|': if(s1[i+1]=='|')a[w]=17;i++;break;


if(q==1)a[w]=2;else {printf("ERROR.\nЛЕКСИЧЕСКАЯ ОШИБКА");break;}


/*---------------------КОНЕЦ
ДЕСКРИПТОРНОГО ТЕКСТА--------------------------*/


case '>': if(s1[i+1]=='='){a[w]=15;i++;}else a[w]=14;break;


case '<': if(s1[i+1]=='='){a[w]=16;i++;}else a[w]=13;break;


case 'd':
if(s1[i+1]=='i'&&s1[i+2]=='v')a[w]=8;i++;i
Похожие работы на - Компьютерные и информационные системы в образовании Контрольная работа. Педагогика.
Реферат: Поняття попиту і пропозиції Закон попиту і пропозиції
Контрольная работа по теме Методика расчета налоговых обязательств
Курсовая работа: Собственный капитал: обеспечения и резервы
Сочинение На Тему Стоит Ли Бояться Перемен
Сочинение На Тему Профессия Футболист
Курсовая работа по теме Гідравлічний розрахунок гідроприводу
Типологии Организационной Культуры Реферат
Реферат О Планете Меркурий 5 Класс География
Курсовая работа: Строение и функции биомеханической системы двигательного аппарата
Реферат: Философия физики. Скачать бесплатно и без регистрации
Дипломная работа по теме Логистическая оптимизация производственного процесса
Реферат Россия В Годы Царствования Ивана 4
Курсовая работа по теме Современная роль гостиниц на примере гостиницы 'Hyundai'
Курсовая работа по теме Показатели по труду и заработной плате работников организации и пути их оптимизации в современных условиях (на материалах ОАО 'Ратон')
Эссе Почему Я Хочу Быть Учителем
Сочинение по теме Поэма Н. А. Некрасова «Мороз, Красный нос»
Курсовая работа по теме Продвижение сайтов, после введения алгоритма 'Минусинск'
Дипломная работа: Компьютерные бухгалтерские учетные системы и их возможности
Курсовая Работа На Тему Рынок Драгоценных Металлов. Понятие. Динамика. Роль
Написать Сочинение Смысл Названия Комедии Недоросль
Сочинение: Сосуществование романтического и обывательского в повести Грина Алые паруса
Приложение Д
Похожие работы на - Топографические карты и их содержание

Report Page