Skip to content

AlexeyKor/Compilator-Flex-Bison

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 

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

No packages published