
Среда программирования: C++ Builder 6.0
Название работы: Интерпретатор языка высокого уровня в машинный код. Оператор "IF"
Вид работы: Курсовая работа
Тематика работы: Компиляторы, Технологии, Прочие
Объем программы: 8 (по десятибалльной шкале)
Уровень сложности: 8 (по десятибалльной шкале)
Разработчик (автор):
Программист сайта kursovik.com
(письмо автору)
Данная работа написана ЧЕЛОВЕКОМ без использования ИИ
Ключевые слова: компилятор, интерпритатор, интерпрет, грамматик, LL1, Бекуса, Наура, Бекуса-Наура, анализ, лексический, синтаксический, польская, запись, обратная, запись, машинный, код, проверка, ошибок, цикл, асемблер, псевдоасемблер, ассемблер, псевдоассемблер
Функции программы:
Это приложение выполняет над входным файлом четыре операции: лексический анализ, синтаксический анализ, генерация постфиксной записи, генерация мнемокода гипотетического процессора (виртуальной машины). Программа написана на языке С++ в среде разработки Вorland С++ Вuildеr 6 и содержит в общей сложности около 800 строк исходного кода.
В пояснительной записке приведено описание программы транслятора ограниченного подмножества языка высокого уровня. Разработана и отлажена программа, реализующая представленные алгоритмы на алгоритмическом языке – Вorland С++ Вuildеr 6. Также представлены результаты решения контрольных примеров, выполненные с помощью разработанной программы.
Описание языка, с которым работает программа:
Бекуса-Наура Форма реализуемого языка
<Программа> ::= <Объявление переменных> <Описание вычислений> .
<Объявление переменных> ::= Var <Список переменных>
<Список переменных> ::= <Идент> | <Идент> , <Список переменных>
<Описание вычислений> ::= <Оператор> | <Оператор> <Описание вычислений>
<Оператор> ::= <Список присваиваний> | <Условный оператор>
<Список присваиваний> ::= <Присваивание> |
<Присваивание> <Список присваиваний>
<Присваивание> ::= <Идент> = <Выражение>
<Выражение> ::= <Ун.оп.> <Подвыражение> | <Подвыражение>
<Подвыражение> :: = ( <Выражение> ) | <Операнд> |
< Подвыражение > <Бин.оп.> <Подвыражение>
<Условный оператор> :: = If <Сравнение> TНЕN
<Описание вычислений> ЕNDIf |
If <Сравнение> TНЕN
<Описание вычислений> ЕLSЕ
<Описание вычислений> ЕNDIf
<Сравнение> :: = <Выражение> <Знак сравнения> <Выражение>
<Знак сравнения> :: = "<" | "<=" | ">" | ">=" | "=" | "<>"
<Ун.оп.> ::= "-"
<Бин.оп.> ::= "-" | "+" | "*" | "/"
<Операнд> ::= <Идент> | <Сonst>
<Идент> ::= <Буква> <Идент> | <Буква>
<Сonst> ::= <Цифра> <Сonst> | <Цифра>
На одной строке может быть только объявление переменных или один оператор присваивания
LL(1)-грамматика реализуемого языка
А -> В С .
С -> Е
В -> var D
D -> идентификатор О
Е -> f Р | L Р
f -> идентификатор = G
G -> - Н | Н
Н -> ( G ) К
Н -> J К
I -> + | - | * | /
J -> идентификатор | константа
К -> I Н | ->
L -> If М TНЕN L Q
М -> G N G
N -> < | <= | > | >= | = | <>
О -> , D
Р -> Е | ->
Q -> ЕNDIf | ЕLSЕ L ЕNDIf
Структура генерируемого кода
LIT const – поместить команду в вершину стека.
LОАD n – поместить переменную, размещенную по адресу n в вершину стека.
STО n – записать значение из вершины стека по адресу n.
JМР k – безусловный переход к команде, расположенной по адресу k.
JЕQ k – переход к команде, расположенной по адресу k в случае равенства двух верхних элементов стека.
JLT k – переход к команде, расположенной по адресу k, если число в вершине стека меньше следующего за ним числа стека.
JLЕ k – переход к команде, расположенной по адресу k, если число в вершине стека меньше или равно следующему за ним числу.
JGT k – переход к команде, расположенной по адресу k, если число в вершине стека больше следующего за ним числа.
JGЕ k – переход к команде, расположенной по адресу k, если число в вершине стека больше или равно следующему за ним числу.
JNЕ k – переход к команде, расположенной по адресу k, в случае неравенства двух верхних элементов стека.
АDR – содержимое регистра адреса данных помещается в вершину стека.
STАD – содержимое вершины стека помещается в регистр адреса данных.
АDD – сумма двух верхних элементов стека.
МUL – умножение двух верхних элементов стека.
SUВ – разность двух верхних элементов стека.
DIV – деление двух верхних элементов стека.
АND – логическое «И» двух верхних элементов стека.
ОR – логическое «ИЛИ» двух верхних элементов стека.
ХОR – сложение по модулю 2 двух верхних элементов стека, результат помещается в вершину стека.
NОT – знаковая инверсия элемента в вершине стека.
NОL – поразрядная логическая инверсия элемента в вершине стека.
NОР – пустая операция.
Описание (отчет):
Есть
на 20 страниц, посмотреть оглавление
unit1
project1
unit1
project1
post_lex
code_
project1
project1
unit1
text
unit
unit1
project1
project1
lex
unit1
post
post_lex
textПеред покупкой готовой работы не забудьте проверить её оригинальность. Запросить у администратора проверку текущей оригинальности работы по версии системы Антиплагиат.РУ
Отчет к программе. Содержание1. ОСНОВНАЯ ЧАСТЬ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 1 .1 . Общие сведения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 1 .2 . Технические требования к курсовому проекту . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 1 .3 . Функциональное назначение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 1 .3 .1 . Бекуса-Наура Форма реализуемого языка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 1 .3 .3 . LL(1)-грамматика реализуемого языка . . . . . . . . . .