-
Notifications
You must be signed in to change notification settings - Fork 0
AlexeyKor/Compilator-Flex-Bison
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
язык, компилятор с которого Вам надо написать, будет следующий (перечисляются его возможности): 1) Поддерживаемые типы данных --- строки, целые числа. Переменные необходимо объявлять до первого использования, возможны локальные переменные (описанные в блоке). Переменные объявляются так: имя,имя,...:тип Строки имеют тип string, числа --- integer. 2) Можно определять классы, синтаксис такой: class имя блок блок содержит объявления полей (как обычных переменных) и методов (синтаксис определения метода таков: имя_метода:тип_результата( список параметров) блок параметры в списке описываются как обычные переменные возврат значения --- return выражение вызов -- как обычно (объект.имя(выражения_параметры_через_запятую)) 2) Для построения выражений можно использовать числовые и строковые (в "") константы, а также следующие операции: арифметические, операции сравнения, логические (0 --- false, 1 --- true), взятие символа из строки (номер ex строка), обращения к полям объектов (объект.имя_поля). 3) Оператор присваивания выглядит как чему := что Здесь чему --- переменная, что --- выражение подходящего типа 4) Блок ограничивается ключевыми словами begin и end, в блоке допустимы описания переменных и другие операторы, разделенные точкой с запятой 5) Из управляющих конструкций имеются а) условный оператор if условие then оператор1 otherwise оператор2 б) цикл, управляемый условием repeat оператор while условие в) оператор goto метка (метка ставится в блоке между соседними операторами конструкцией label метка) 6) оператор ввода read(куда) --- читает значение указанной переменной, оператор вывода write(что) --- выводит значение выражения. Компилировать программу нужно в ассемблер некоторой виртуальной машины, у которого имеются следующие команды: STRING имя, строка завести указанную строку с указанным начальным значением INTEGER имя, число аналогично для целых чисел MOVE имя1, имя2 переписать содержимое переменной имя1 в переменную имя2 INDIR имя1, имя2 переписать содержимое переменной, чье имя содержится в переменной имя1 в переменную имя2 READ имя WRITE имя LABEL строка поставить метку GOTO имя безусловный переход к метке, имя которой содержится в указанной переменной BRANCH имя, метка условный переход к метке, если указанный элемент указанного массива имеет значение 1 ADD имя1, имя2, имя3 сложение (для строк --- конкатенация) аналогично SUB --- вычитание, MUL --- умножение, DIV --- деление, GT, GE, LT, LE, EQ, NE --- сравнение, AND, OR, NOT --- логические операции (у NOT только 2 параметра, а не 3). IND имя, имя, имя получить символ строки из указанной переменной по указанному индексу (второе имя должно быть именем переменной, содержащей число)
About
Compliatior from simple Pascal-like language to Assembler, using Flex and Bison
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published