Задание - Интерпретатор модельного языка программирования (1115024)
Текст из файла
Практическое задание для студентов 2 курса ВМиК МГУ им. М.В. ЛомоносоваИнтерпретатор модельного языкапрограммированияТребуется разработать и реализовать интерпретатор модельного языка программирования. Инструментальный язык — С++.Синтаксис модельного языка:Синтаксис описан с помощью расширенной БНФ:a) запись вида {α} означает итерацию цепочки α, т.е. в порождаемой цепочке вэтом месте может находиться либо ε, либо α, либо αα, либо ααα и т.д.b) запись вида [α] означает, что в порождаемой цепочке в этом месте может находиться либо α, либо ε.c) чтобы отличать фигурные скобки — служебные символы БНФ от фигурныхскобок — символов модельного языка, первые выделены жирным шрифтом иподчеркнуты.d) жирным шрифтом выделены служебные слова модельного языка.Общая часть (одинаковая для всех вариантов):〈программа〉→ program { 〈описания〉 〈операторы〉 }〈описания〉→ { 〈описание〉; }〈описание〉→ 〈тип〉 〈переменная〉 { , 〈переменная〉 }〈тип〉→ int | string〈переменная〉→ 〈идентификатор〉 |〈идентификатор〉 = 〈константа〉〈константа〉→ 〈целочисленная〉 | 〈строковая〉〈целочисленная〉→ [〈знак〉] 〈цифра〉 { 〈цифра〉 }〈знак〉→+|−〈строковая〉→ " { 〈литера〉 } "〈операторы〉→ { 〈оператор〉 }〈оператор〉→ if (〈выражение〉) 〈оператор〉 else 〈оператор〉 |while (〈выражение〉) 〈оператор〉|read (〈идентификатор〉); |write (〈выражение〉 { , 〈выражение〉 } ); |〈составной оператор〉 | 〈оператор-выражение〉〈составной оператор〉 → { 〈операторы〉 }1/10Практическое задание для студентов 2 курса ВМиК МГУ им.
М.В. Ломоносова〈оператор-выражение〉 → 〈выражение〉;Семантика операторов if и while общепринятая; оператор read — оператор ввода значения переменной 〈идентификатор〉; write — оператор вывода значений списка выражений, указанных в круглых скобках. Форматы ввода и вывода данных определяютсяреализацией. Числовые константы записываются в десятичной системе счисления.О выраженииНабор операций и их старшинство:not(логическое отрицание)* / (умножение и деление)+ − (сложение и вычитание)< > <= >= == != (операции отношения)and (логическое умножение)or(логическое сложение)=(присваивание)Семантика операций общепринятая (в частности, семантика операции присваиванияэквивалентна семантике соответствующего оператора языка С).Синтаксис выражений описывается самостоятельно; настоятельно рекомендуется с помощью синтаксических правил задать старшинство операций.Для данных типа string определены следующие операции:•инициализация и присваивание•+ операция конкатенации строк; группировка слева направоНапример, если имеется определение string a = "one", b = "two", c; то в результате выполнения оператора-выражения c = a + " plus " + b; в c будет получена строка "one plus two".•операции отношения < > == !=Например, если string a = "one", b = "only", c = "one"; то истинными являются выражения a < b, a == c, b != c; ложными — c > b, a != c, a == b.Вариантная часть (расширяет язык, определенныйв общей части):В каждый вариант входит (как минимум) один из подпунктов каждого пункта, отмеченного римской цифрой.I.
Условные операторы1. 〈оператор〉 → if (〈выражение〉) 〈оператор〉2. 〈оператор〉 → case (〈выражение〉) of 〈список_вариантов〉 end;〈список вариантов〉 → 〈вариант〉 { 〈вариант〉 }2/10Практическое задание для студентов 2 курса ВМиК МГУ им. М.В. Ломоносова〈вариант〉 → 〈константа〉 { , 〈константа〉 } : 〈оператор〉Семантика оператора if общеизвестна; семантика оператора case – как в Паскале (вчастности, если значение выражения не совпадает со значением какой-либо константыв списке вариантов, это считается ошибкой; константы в разных вариантах должныбыть различными, даже в одном варианте не должно быть одинаковых констант).II.
Операторы цикла1. 〈оператор〉 → do 〈оператор〉 while (〈выражение〉) ;2. 〈оператор〉 → for ( [〈выражение〉];[〈выражение〉];[〈выражение〉])〈оператор〉Семантика операторов цикла do-while и for совпадает с семантикой соответствующихоператоров языка С.3. 〈оператор〉→ for 〈параметр цикла〉 = 〈выражение〉 step 〈выражение〉until 〈выражение〉 do 〈оператор〉〈параметр цикла〉 → 〈идентификатор〉Если записать оператор цикла с параметром в виде for I = E1 step E2 until E3 do S, где E1,E2, E3 — выражения, S — оператор, то семантика этого оператора такова: параметрцикла I принимает последовательные значения от заданного начального значения E1 дозаданного конечного значения E3 с шагом E2; при каждом значении параметра циклавыполняется оператор S. Если начальное значение больше конечного, то оператор невыполняется ни разу.
Значения выражений E1, E2, E3 вычисляются один раз перед входом в цикл. Значение параметра цикла после его нормального (не по goto) завершениясчитается неопределенным.III. Операторы перехода1. 〈оператор〉 → 〈помеченный оператор〉 | goto 〈идентификатор〉 ;〈помеченный оператор〉 → 〈идентификатор〉 : 〈оператор〉2. 〈оператор〉 → continue;3.
〈оператор〉 → break;В соответствии с контекстными условиями, любой идентификатор, используемый впрограмме, должен быть описан и только один раз. Описанием идентификатора-меткисчитается ее использование в помеченном операторе. Разные операторы не могут бытьпомечены одинаковыми метками (это эквивалентно повторному описанию этой метки);более того, будем считать, что одна и та же метка не может помечать один и тот жеоператор более одного раза.Семантика операторов continue и break совпадает с семантикой соответствующих операторов языка С и относится к оператору цикла любого вида, входящему в выбранныйвариант модельного языка.IV. Типы данных1.
〈тип〉 → boolean3/10Практическое задание для студентов 2 курса ВМиК МГУ им. М.В. Ломоносова〈константа〉 → 〈логическая〉〈логическая〉 → true | false2. 〈тип〉 → real〈константа〉 → 〈вещественная〉〈вещественная〉 → [〈знак〉] 〈целая часть〉.〈дробная часть〉〈целая часть〉 → 〈цифра〉 { 〈цифра〉 }〈дробная часть〉 → 〈цифра〉 { 〈цифра〉 }Числовые константы записываются в десятичной системе счисления.V. Дополнительные операции1. унарный минус,2. унарные минус и плюс,3. % — остаток от деления.VI. Правило вычисления логических выражений1. «Ленивые» вычисления логических выражений (слева направо; до тех пор,пока не станет известно значение выражения).2.
Вычисления по обычной схеме (слева направо; вычисление всего выражения).Контекстные условия1. Любой идентификатор, используемый в программе, должен быть описан итолько один раз.2. При инициализации переменных типы констант должны совпадать с типамипеременных.3. С помощью оператора read можно вводить данные любых типов, определенных в языке, кроме логического.4. С помощью оператора write можно выводить значения любых типов, определенных в языке.5. В операторе цикла с параметром for I = E1 step E2 until E3 do S тип выраженийи параметра цикла должен быть целочисленным.6. Если в языке есть логический тип данных (boolean), то только логическое выражение может использоваться в условном операторе if, в операторах циклаwhile, for и do-while в качестве условия завершения цикла.
Если в языке нетлогического типа данных, то используется целочисленное выражение(0 == false; любое значение, отличное от 0, == true). Вещественное выражениене может использоваться в качестве условия завершения цикла.7. Тип выражения и констант вариантов в операторе case должен быть целочисленным.4/10Практическое задание для студентов 2 курса ВМиК МГУ им. М.В. Ломоносова8. Если в языке есть логический тип данных (boolean), то тип выражения и совместимость типов операндов в выражении определяются по правилам, приведенным в Таблице № 1, иначе — в Таблице № 2.Замечание: если в языке отсутствует какая-либо операция либо тип, указанный в качестве типа операнда операции, то строки таблиц, их содержащие, не принимать во внимание. если в языке есть логический тип данных, то результат выполнения операций отношения — логическое значение true или false, иначе — целочисленные 0 (false) либо 1 (true). X — первый операнд, Y — второй операнд двуместной операции; если операция одноместная, то вместо типа второго операнда стоит «−».тип реОперациятип ре-тип Xтип YзультатаОперациятип Xтип Yзультата+ − * / %intintint+ − * / %intintint+ − * /realrealreal+ − * /realrealreal+ − * /realintreal+ − * /realintreal+ − * /intrealreal+ − * /intrealreal+stringstringstring+stringstringstringунарные +−int–intунарные +−int–intунарные +−real–realунарные +−real–real< > <= >=== !=intintboolean< > <=>= == !=intintint< > <= >=== !=realrealboolean< > <=>= == !=realrealint< > <= >=== !=realintboolean< > <=>= == !=realintint< > <= >=== !=intrealboolean< > <=>= == !=intrealintstringstringboolean< > == !=stringstringintand orbooleanbooleanbooleanand orintintintnotboolean–booleannotint–int=intintint=intintint=realrealreal=realrealreal=intrealint=intrealint=realintreal=realintreal=stringstringstring=stringstringstring=booleanbooleanboolean< >== !=Таблица №1Таблица №25/10Практическое задание для студентов 2 курса ВМиК МГУ им.
М.В. ЛомоносоваПравила записи текста программы на модельномязыкеЭти правила характерны для большинства языков программирования: в любом месте программы, кроме идентификаторов, служебных слов ичисловых констант, может находиться произвольное число пробельныхлитер и комментариев вида /* 〈любые символы, кроме */ 〉 */. пробел в строковой константе считается значащим символом строки. внутри идентификаторов, служебных слов, числовых констант и разделителей, состоящих из нескольких символов, пробельные литеры недопустимы. между идентификаторами, числами и служебными словами должен находиться хотя бы один разделитель текста.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.