ОТЧЕТ КОРЯГИН (Курсовая БНФ - 3 вариант)
Описание файла
Файл "ОТЧЕТ КОРЯГИН" внутри архива находится в папке "Курсовая БНФ - 3 вариант". Документ из архива "Курсовая БНФ - 3 вариант", который расположен в категории "". Всё это находится в предмете "программирование" из 5 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "программирование" в общих файлах.
Онлайн просмотр документа "ОТЧЕТ КОРЯГИН"
Текст из документа "ОТЧЕТ КОРЯГИН"
Федеральное агентство по образованию
Государственное образовательное учреждение высшего профессионального образования
«Московский государственный университет приборостроения и информатики»
Отчет по курсовой работе
Вариант «3»
отчет подготовил: Васильев О.М.
студент 3 курса ИТ-6 группы
Проверил: Корягин С. В.
Москва 2012г.
Текст задания
Язык = "Begin" Множества Остаток "End"
Множества = Множество ","... Множество
Множество = ["First"!"Second"] Цел, ... Цел ["Mult"!"Add"] Вещ
Остаток = </ Метка ":"/> Перем "=" Прав. часть
В Прав.части - переменные и целые числа; соединены аддитивными, мультипликативными и степенными операциями; есть круглые скобки с любой глубиной вложенности.
Переменная - набор букв и цифр с первой буквы
Метка целочисленная.
Латинский алфавит, шестнадцатиричная арифметика
БНФ
Язык="Begin" Множества Остаток "End"
Множества=Множество"," ... Множество
Множество=["First"!"Second"] Цел "," ... цел ["Add"!"Mult"] Вещ
Остаток=</Метка ":"/> Перем "=" Правчасть
Правчасть=</"-"/> Блок1 зн1 ...Блок1
зн1="+"!"-"
Блок1=Блок2 зн2...Блок2
зн2="*"!"/"
Блок2=Блок3"↑" ... Блок3
Блок3=цел!перем!"("Правчасть")"
Перем=Букв</симв...симв/>
цел=цифр...цифр
Симв=Букв!цифр
Букв="А"!"В"..."Z"
Метка=цел
цифр="0"!"1"!..."F"
Вещ=цел","цел
Я Вход ЗЫК:
Begin
Множество
","
Остаток
End
Выход | ПроверкаПервогоСлова(Отказать); Если Отказать Тогда Возврат; КонецЕсли; ПроверкаМножеств(Отказать); Если Отказать Тогда Возврат; КонецЕсли; ПроверкаВыражений(Отказать); Если Отказать Тогда Возврат; КонецЕсли; ПроверкаПоследнегоСлова(Отказать); Если Отказать Тогда Возврат; КонецЕсли; |
Вход МНОЖЕСТВО:
Second ыход
First
Цел
","
Add Mult
Вещ
Выход | Если Найти(ТекстПроверки, "second") = 0 ИЛИ Найти(ТекстПроверки, "first") = 0 Тогда ДобавитьСтрокуОшибки("Не обнаружено слово Second или First", 0, 0, Отказать, Ложь); КонецЕсли; Для Шаг = 1 По СтрДлина(ТекстПроверки) Цикл СимволДляПроверки = Сред(ТекстПроверки, Шаг, 1); Если СимволДляПроверки <> "," Тогда Попытка Проверка = Число(СимволДляПроверки); Исключение Прервать; КонецПопытки; КонецЕсли; КонецЦикла; Если MultИЛИAdd <> "mult" И MultИЛИAdd <> "add" Тогда ДобавитьСтрокуОшибки("После целых чисел не обнаружено слово Mult или Add", 1, Шаг, Отказать); Возврат Неопределено; ИначеЕсли MultИЛИAdd = "mult" Тогда ОбрезатьСтрокуПроверки(4); ИначеЕсли MultИЛИAdd = "add" Тогда ОбрезатьСтрокуПроверки(3); КонецЕсли; |
О Вход статок:
Нет Да
метка ":"
Перем
"="
ПравЧасть
Выход | ПозицияДвоиточия = Найти(ТекстПроверки, ":"); ПозицияЗнакаРавенства = Найти(ТекстПроверки, "="); Если ПозицияДвоиточия <> 0 И ПозицияЗнакаРавенства > ПозицияДвоиточия Тогда ПроверкаМетки = Лев(ТекстПроверки, ПозицияДвоиточия - 1); Попытка ПроверкаМетки = Число(ПроверкаМетки); Если Число(ПроверкаМетки) <> Цел(ПроверкаМетки) Тогда Отказать = Истина; КонецЕсли; Исключение Отказать = Истина; КонецПопытки; Если Отказать Тогда ДобавитьСтрокуОшибки("Метка может быть только целочисленной", 1, ПозицияЗнакаРавенства - 1, Отказать); Возврат Ложь; КонецЕсли; СтруктураПеременных = Новый Структура; Для Каждого СтрокаПеременных Из ТаблицаПеременных Цикл СтруктураПеременных.Вставить(СтрокаПеременных.Имя, Число(СтрокаПеременных.Значение)); КонецЦикла; |
П Вход рав часть:
Да Нет
"-"
"+" "-"
Блок 1 Блок 1
ПраваяЧасть = ПравЧасть + Блок1 ПраваяЧасть = ПравЧасть - Блок1
Выход | Для Шаг = ПозицияРавно + 1 по Длина(СтрокаДляПроверки) Цикл Символ = Сред(СтрокаДляПроверки, Шаг, 1); Если Символ = " " Или Символ = Символы.ПС Тогда Если Цифра Тогда ПробелПослеЦифры = Истина; КонецЕсли; Продолжить; КонецЕсли; ТекПроверка = ПроверитьОператора(Символ); Если Оператор И ТекПроверка Тогда ДобавитьСтрокуОшибки("Пропущено число", Шаг - 1, Шаг + 1, Отказать); Возврат; ИначеЕсли Не Оператор И ТекПроверка Тогда Оператор = Истина; ПробелПослеЦифры = Ложь; Цифра = Ложь; Иначе Если ПробелПослеЦифры Тогда ДобавитьСтрокуОшибки("Пропущен оператор", Шаг - 1, Шаг + 1, Отказать); Возврат; КонецЕсли; Оператор = Ложь; ПробелПослеЦифры = Ложь; Цифра = Истина; КонецЕсли; КонецЦикла; |
Б Вход лок 1:
Блок 2
Блок 1 = Блок 2
"/" "*"
Блок1 = Блок1 / Блок2 Блок1 = Блок1 * Блок2
Выход | ТекстПроверки = СокрЛ(ТекстПроверки); СтрокаВыражения = ""; Символ = Сред(ТекстПроверки, Шаг, 1); Пока Символ <> Символы.ПС Цикл СтрокаВыражения = СтрокаВыражения + Символ; Шаг = Шаг + 1; Символ = Сред(ТекстПроверки, Шаг, 1); КонецЦикла; Если ЗначениеЗаполнено(СокрЛП(СтрокаВыражения)) Тогда ПроверитьСтрокуВыражения(СтрокаВыражения, Отказать); Если Отказать Тогда Возврат Ложь; КонецЕсли; ПодготовитьСтрокуВыражения(СтрокаВыражения, СтруктураПеременных); Попытка Выполнить(СтрокаВыражения); Исключение ТекстОшибки = ОписаниеОшибки(); ПреобразоватьСтрокуОшибки(ТекстОшибки); ДобавитьСтрокуОшибки(ТекстОшибки, 1, Шаг, Отказать); КонецПопытки; КонецЕсли; Если Отказать Тогда Возврат Ложь КонецЕсли; |
Б Вход лок 2:
Блок 3
Нет Да
"↑"
Блок 3
Выход | ТекстПроверки = СокрЛ(ТекстПроверки); СтрокаВыражения = ""; Символ = Сред(ТекстПроверки, Шаг, 1); Пока Символ <> Символы.ПС Цикл СтрокаВыражения = СтрокаВыражения + Символ; Шаг = Шаг + 1; Символ = Сред(ТекстПроверки, Шаг, 1); КонецЦикла; Если ЗначениеЗаполнено(СокрЛП(СтрокаВыражения)) Тогда ПроверитьСтрокуВыражения(СтрокаВыражения, Отказать); Если Отказать Тогда Возврат Ложь; КонецЕсли; ПодготовитьСтрокуВыражения(СтрокаВыражения, СтруктураПеременных); Попытка Выполнить(СтрокаВыражения); Исключение ТекстОшибки = ОписаниеОшибки(); ПреобразоватьСтрокуОшибки(ТекстОшибки); ДобавитьСтрокуОшибки(ТекстОшибки, 1, Шаг, Отказать); КонецПопытки; КонецЕсли; Если Отказать Тогда Возврат Ложь КонецЕсли; ДобавитьСтрокуОшибки(ТекстОшибки, 1, Шаг, Отказать); КонецПопытки; КонецЕсли; Если Отказать Тогда Возврат Ложь КонецЕсли; |
Вход
Выход
"("
Перем
Прав часть цел
")" | ТаблицаСкобок = Новый ТаблицаЗначений; ТаблицаСкобок.Колонки.Добавить("ПозицияСкобки"); ТаблицаСкобок.Колонки.Добавить("Закрыта"); Для Шаг = ПозицияРавно + 1 по СтрДлина(СтрокаВыражения) Цикл Символ = Сред(СтрокаВыражения, Шаг, 1); Если Символ = ")" Тогда ЗакрытьСкобку(ТаблицаСкобок, Шаг, Отказать, ПозицияРавно); Если Отказать Тогда Возврат; КонецЕсли; ИначеЕсли Символ = "(" Тогда ДобавитьСкобку(ТаблицаСкобок, Шаг); КонецЕсли; КонецЦикла; Для Каждого Строка Из ТаблицаСкобок Цикл Если Не Строка.Закрыта Тогда ДобавитьСтрокуОшибки("Скобка ""("" не закрыта", Строка.ПозицияСкобки ,Шаг , Отказать); КонецЕсли; КонецЦикла; |
Скриншоты программы: