Транслятор

Лабораторная работа
в среде программирования Visual C++ .NET 2003



Если Вы считаете, что данная страница каким-либо образом нарушает Ваши авторские права, то Вам следует обратиться в администрацию нашего сайта по адресу info@kursovik.com либо через форму обратной связи

Среда программирования: Visual C++ .NET 2003

Название работы: Транслятор

Вид работы: Лабораторная работа

Описание: Задание: Написать транслятор.

Идентификатор:
$ идентификатор = буква { буква | цифра }.
$ буква = "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"|"e"|"f"|"g"|"h"|"i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"w"|"x"|"y"|"z".
$ цифра = "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9".
Комментарий:
Начало комментария: "/*"
Конец комментария: "*/"

Тип лексического анализатора (сканера): Прямой

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

Организация метки.
Метка состоит из имени метки и двоеточия, являющегося ограничителем данной конструкции.
Метка - буквенно-цифровая строка:
$ метка = имя_метки ":".
$ имя_метки = идентификатор.

Организация целых чисел.
$ целое = двоичное | восьмеричное | десятичное | шестнадцатеричное.
В стиле ассемблера.
$ двоичное = {/ "0" | "1" /} ( "B" | "b" ).
$ восьмеричное = {/ "0"|"1"|"2"|"3"|"4"|"5"|"6"|"7" /} ( "C" | "c" ).
$ десятичное = {/ цифра /} [ "D" | "d" ].
$ шестнадцатеричное = цифра {цифра | "A"|"B"|"C"|"D"|"E"|"F"|"a"|"b"|"c"|"d"|"e"|"f" } ( "H" | "h" ).

Организация действительных чисел.
$ числовая_строка = {/ цифра /}.
$ порядок = ("E"|"e")["+"|"-"] числовая_строка.
В стиле Паскаля.
$ действительное = числовая_строка "." числовая_строка [порядок] | числовая_строка порядок.

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

Организация программы.
Программа состоит из двух областей: описаний и операторов. За лексемой, определяющей конец программы в файле может быть что угодно, так как осуществлять разбор дальше в соответствии с синтаксисом не имеет смысла.
$ программа = [ var описание { ";" описание } ] [implementation процедура { ";" процедура } ] "{" оператор { ";" оператор } "}".
$ составной = "{" оператор { ";" оператор } "}".

Описания.
В стиле языка Паскаль:
$ описание = идентификатор { "," идентификатор } ":" [ vector "[" целое "]" of ] тип.
$ тип = int | real.

Синтаксис операторов.
Следует отметить, что пустой оператор - это отсутствие каких бы то ни было конструкций, а не точка которая в данном случае является компонентой метаязыка, завершающей правило. Оператор прерывания цикла (break) допускается только внутри циклов.
$ оператор = [метка] непомеченный.
$ непомеченный = составной | присваивания | перехода | условный | цикла | пустой | ввода | вывода | вызов | break .
$ пустой = .
$ перехода = goto имя_метки.
$ ввода = read переменная { "," переменная }.
$ вывода = write ( выражение | спецификатор ) { "," ( выражение | спецификатор ) }.
$ переменная = идентификатор [ "[" индекс "]" ].
$ индекс = идентификатор | целое.
$ спецификатор = skip | space | tab.

Оператор присваивания.
Определяется синтаксис не только данного оператора, но и выражения, которое ему присваивается. Это выражение может использоваться и в других конструкциях языка, например в операторе вывода.
Постфиксная форма.
$ присваивание = "(" выражение переменная "=" ")".
$ выражение = "(" операнд операнд операция ")" | "(" операнд "-" ")" | операнд .
$ операция = "*" | "/" | "%" | "+" | "-" | "==" | "!=" | "<" | ">" | "<=" | ">=".
$ операнд = выражение | переменная | целое | действительное.

Условный оператор.
$ условный = if выражение then непомеченный [ else непомеченный ].

Оператор цикла.
Внутри цикла, в т.ч. внутри вложенных конструкций цикла (например, внутри вложенного условного оператора) допускается использование оператора break, прерывающего исполнение цикла.
$ цикла = loop оператор { ";" оператор } end.

Подпрограммы.
Изменения в переменных, передаваемых в подпрограмму, видны за пределами подпрограммы, т.е. параметры в подпрограмму передаются по ссылке.
$ процедура = procedure идентификатор { описание ";" } составной.
Вызов подпрограммы:
$ вызов = идентификатор "(" [ переменная { "," переменная } ] ")".

Год: 2013

Данный заказ (лабораторная работа) выполнялся нашим сайтом в 2013-м году, в рамках этого заказа была разработана программа в среде программирования Visual C++ .NET 2003. Если у Вас похожее задание на программу, которую нужно написать на Visual C++ .NET 2003, либо на другом языке программирования, пожалуйста заполните форму, приведённую ниже, после чего Ваше задание в первую очередь рассмотрит наш программист, выполнявший в 2013-м году этот заказ, если он откажется, то Ваше задание оценят другие наши программисты в течение 48-и часов, если оценка нужна срочно, просим Вас оставить пометку об этом - напишите в тексте задания фразу "СРОЧНЫЙ ЗАКАЗ".

Купить эту работу

Тел.: +79374242235
Viber: +79374242235
Telegram: kursovikcom
ВКонтакте: kursovikcom
WhatsApp +79374242235
E-mail: info@kursovik.com
Skype: kursovik.com