Создание компилятора с заданного подмножества языка

Автор работы: Пользователь скрыл имя, 14 Сентября 2013 в 13:58, курсовая работа

Краткое описание

Цель работы: изучение составных частей, основных принципов построения и функционирования компиляторов, практическое освоение методов построения простейших компиляторов для заданного входного языка.
Курсовая работа заключается в создании компилятора с заданного подмножества языка. Результатами курсовой работы являются программная реализация заданного компилятора и пояснительная записка, оформленная в соответствии с требованиями стандартов и задания на курсовую работу.

Вложенные файлы: 1 файл

Курсовая работа СПО _2012.doc

— 162.00 Кб (Скачать файл)

Курсовая работа по предмету «Системное программное  обеспечение»

4-й курс (2011 год)

 

Цель работы: изучение составных частей, основных принципов построения и функционирования компиляторов, практическое освоение методов построения простейших компиляторов для заданного входного языка.

 

Курсовая работа заключается в  создании компилятора с заданного  подмножества языка. Результатами курсовой работы являются программная реализация заданного компилятора и пояснительная записка, оформленная в соответствии с требованиями стандартов и задания на курсовую работу.

Для программной реализации компилятора  рекомендуется использовать язык программирования C++ и систему программирования Visual Studio 2008 Express Edition . Возможно использовать другие системы программирования по согласованию с преподавателем. Компилятор должен содержать следующие составные части:

    1. Лексический анализатор.
    2. Синтаксический анализатор.
    3. Оптимизатор.
    4. Генератор результирующего кода.

Для построения компилятора рекомендуется  использовать методы, освоенные в ходе выполнения лабораторных работ по курсу «Системное программное обеспечение».

 

Порядок выполнения работы.

Рекомендуемый порядок выполнения работы представлен в табл. 1.

 

Таблица 1. Рекомендуемые этапы и время выполнения курсовой работы

Этап выполнения работы

Время выполнения

(недели)

Результат

1

Получение задания

   

2

Выбор одной из трех форм грамматики,

запись грамматики входного языка  в

выбранной форме грамматики

1

Грамматика входного

языка

3

Разработка  структуры лексического анализатора

0,25

Описание лексического

анализатора

4

Разработка структуры данных и  алгоритмов для таблицы идентификаторов

0,25

Описание 

способа организации

таблицы идентификаторов

5

Построение лексического анализатора

0,5

Граф переходов автомата

лексического анализатора

6

Программная реализация

лексического анализатора

2

Программный код

лексического анализатора

7

Выбор класса КС-грамматик для

построения синтаксического

анализатора

0,5

Описание синтаксического

анализатора

8

Программная реализация

синтаксического анализатора

3,5

Программный код

синтаксического

анализатора

9

Описание используемых форм

внутреннего представления

программы

0,5

Описание 

форм внутреннего

представления программы

10

Описание используемого

алгоритма оптимизации

0,5

Алгоритм работы

оптимизатора

11

Программная реализация

оптимизатора

2

Программный код

оптимизатора

12

Реализация генератора

результирующего кода

2

Программный код

генератора

результирующего кода

13

Отладка компилятора в целом

1

Программный код

разработанного

компилятора

14

Оформление пояснительной записки

1,5

Пояснительная записка к

курсовой работе

15

Подготовка курсовой работы к защите

0,5

 

16

Защита курсовой работы

   
 

Итого

16

 

 

Требования к содержанию пояснительной записки

 

Пояснительная записка к курсовой работе должна содержать следующие разделы:

    1. Краткое изложение цели работы.
    2. Задание к курсовой работе (номер варианта и полное описание своего варианта).
    3. Грамматика входного языка в одном из трех возможных видов:
      1. форма Бэкуса—Наура;
      2. форма с метасимволами;
      3. графическая форма.
    4. Описание способа организации таблицы идентификаторов.
    5. Описание лексического анализатора и метода его взаимодействия с синтаксическим анализатором.
    6. Граф переходов или иное описание конечного автомата лексического анализатора.
    7. Описание класса КС-грамматик для построения синтаксического анализатора.
    8. Описание синтаксического анализатора в зависимости от выбранного класса КС-грамматик (включая все необходимые управляющие таблицы и множества).
    9. Описание форм внутреннего представления программы, используемых в компиляторе.
    10. Описание используемого метода порождения результирующего кода.
    11. Описание используемого метода оптимизации.
    12. Информация об организации построенного компилятора, его разбиении на проходы, количество проходов в компиляторе.
    13. Выводы по проделанной работе.
    14. Пример входной программы и результирующей программы, построенной компилятором.
    15. Текст программы компилятора.

 

Примеры входной и результирующей программ, а также текст программы компилятора рекомендуется оформлять в виде приложений к тексту пояснительной записке.

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

Допускается для построения лексического и (или) синтаксического анализаторов использовать автоматизированные методы построения распознавателей (например, на основе программ LEX и YACC). В этом случае не требуется приводить граф переходов конечного автомата (для лексического анализатора) и описание синтаксического анализатора.

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

 

Задание на курсовую работу

 

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

Командная строка должна быть достаточной  для функционирования компилятора. Помимо интерфейса командной строки возможно наличие дополнительного интерактивного интерфейса пользователя у компилятора (в том числе и графического) по усмотрению исполнителя работы.

Входной язык компилятора должен удовлетворять  следующим требованиям:

    • входная программа начинается ключевым словом prog  и заканчивается ключевым словом end;
    • входная программа может быть разбита на строки произвольным образом, все пробелы и переводы строки должны игнорироваться компилятором;
    • текст входной программы может содержать комментарии любой длины, которые должны игнорироваться компилятором (вид комментария задан в варианте задания);
    • входная программа должна представлять собой единый модуль, содержащий линейную последовательность операторов, вызовы процедур и функций не предусматриваются;
    • должны быть предусмотрены следующие варианты операторов входной про-

граммы:

      • оператор присваивания вида <переменная>=<выражение>;
      • условный оператор согласно варианту задания;
      • составной оператор вида согласно варианту задания;
      • оператор цикла согласно варианту задания;
      • выражения в операторах могут содержать следующие операции (минимум):
        • арифметические операции сложения (+) и вычитания (-);
        • операции сравнения «меньше» (<), «больше» (>), «равно» (=);
        • логические операции И (and), ИЛИ (or), HE (not);
        • дополнительные арифметические операции, предусмотренные вариантом задания;
    • операндами в выражениях могут выступать идентификаторы (переменные) и константы (тип допустимых констант указан в варианте задания);
    • все идентификаторы, встречающиеся в исходной программе, должны восприниматься как переменные, имеющие тип, заданный в варианте задания (предварительного описания идентификаторов в исходной программе не требуется);
    • должны учитываться два предопределенных идентификатора InpVar и CotnpileTest смысл которых будет ясен из приводимого далее описания выходного языка.

Приоритет операций исполнитель работы должен выбрать самостоятельно (приоритет операций учитывается в грамматике входного языка). Для изменения приоритета операций должны использоваться круглые скобки.

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

Компилятор должен проверять следующие  семантические ограничения входного языка:

    • не допускается присвоение значений константам;
    • не допускается присвоение значения идентификатору InpVar;
    • не допускается использовать идентификатор CompileTest, иначе как для присвоения ему значений.
    • В качестве выходного (результирующего) языка, должен использоваться язык ассемблера процессоров типа Intel 80x86.

Всю неизменную часть результирующей программы компилятор должен порождать самостоятельно вне зависимости от поданной на вход исходной программы. Имя результирующей программы исполнитель выбирает самостоятельно. Идентификаторы InpVar и CompileTest являются предопределенными переменными, которые используются для подачи значений на вход результирующей программы и получения результата от нее при тестировании работоспособности результирующей программы. Тип данных, используемый для всех переменных, задается в варианте задания. Все встречающиеся в исходной программе идентификаторы следует считать простыми скалярными переменными, не требующими выполнения преобразования типов. Ограничения на длину идентификаторов и констант во входной программе исполнитель выбирает самостоятельно, но выбранная длина не должна быть меньше 32. В случае если на вход компилятора подается входная программа, содержащая семантические или синтаксические ошибки, компилятор должен корректно завершать свое выполнение и выдавать сообщение о найденной ошибке во входной программе с указанием строки, в которой найдена ошибка. По возможности компилятор должен указывать тип найденной ошибки. Компилятор может указать несколько ошибок во входной программе, если они были им обнаружены.

 

 

Варианты  заданий

 

Предлагаемые варианты заданий  приведены в табл. 2

 Таблица 2.

Варианты заданий на выполнение курсовой работы

 

вари-

анта

Метод организации таблицы  иденти-

фикаторов

Описание входного языка

Оператор цикла

Условный оператор

Тип операндов и констант

Вид комментария

Арифметические выражения

Алгоритм оптимизации

1.

Простой список.

do {...} while(...),

разделенные

символом ; (точка с запятой).

if( ... ) ....else...

разделенные символом ; (точка  с запятой)

float

Комментарий в фигурных скобках: {...}.

выражения, разделенные символом ;

(точка с запятой). Состоят из идентификаторов,

десятичных чисел с плавающей  точкой (в обычной и логарифмической  форме), знака присваивания (:=), знаков операций +, -, *, / , простых логических операций (<, >, =)и круглых скобок

Исключение лишних операций.

2.

Рехэширо-

вание с использо-ванием псеводо-случайных чисел

while(...) {...}

разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

integer

Комментарий в круглых скобках  со звездочкой: (*...*).

логические выражения, разделенные символом; (точка с запятой), состоят из идентификаторов, констант true и false, знака присваивания (:=), знаков операций or, xor, and, not и круглых скобок.

Свертка объектного кода.

3.

Рехэши-

рование с помощью произведения

for (...; ...;...)

разделенные

символом ; (точка с  запятой).

if... then ... else … 

if... then …,

разделенные символом ; (точка с  запятой)

double

Комментарий за двойной  косой чертой до конца строки: //....

Операторы условия содержат идентификаторы, знаки сравнения <, >, =, десятичные числа с плавающей точкой

(в обычной и логарифмической  форме), знак присваивания (:=).

Исключение лишних операций

4.

Метод цепочек

for (...; ...;...) разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

float

Комментарий внутри косых  черт со звездочкой: /*...*/.

Операторы цикла содержат идентификаторы,

знаки сравнения<, >, =, десятичные числа с плавающей точкой (в обычной

и логарифмической форме), знак присваивания (:=).

Свертка объектного кода.

5.

Рехэширо-

вание с использо-ванием псеводо-случайных  чисел

do {...} while(...),

разделенные

символом ; (точка с  запятой).

if... then ... else … 

if... then …,

разделенные символом ; (точка  с запятой)

integer

Комментарий в фигурных скобках: {...}.

арифметические выражения, разделенные  символом

; (точка с запятой). Состоят из  идентификаторов,

римских чисел, знака присваивания (:=), знаков операций +, -, *, / и круглых

скобок.

Исключение лишних операций

6.

Упорядо-ченный список

while(...) {...}

разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

char

Комментарий в круглых скобках  со звездочкой: (*...*).

Логические выражения, разделенные  символом; (точка с запятой). Логические выражения состоят из идентификаторов, констант

0 и 1, знака присваивания (:=), знаков  операций or, xor, and, not и круглых

скобок.

Свертка объектного кода.

7.

Бинарное  дерево

while(...) {...}

разделенные

символом ; (точка с запятой).

if... then ... else и if... then,

разделенные символом ; (точка с запятой).

integer

Комментарий за двойной косой чертой до конца строки: //....

Операторы условия содержат идентификаторы, знаки сравнения <, >, =, римские  числа, знак присваивания (:=).Знаков операций +, -, *, / и круглых скобок.

 

Исключение лишних операций

8.

Простое

рехэши

-рование

for (...; ...; ...) do, разделенные

символом ; (точка с запятой).

if... then ... else и if... then,

разделенные символом ; (точка с  запятой).

integer

Комментарий внутри косых черт со звездочкой: /*...*/.

Операторы цикла содержат идентификаторы,

знаки сравнения <, >, =, римские числа, знак присваивания (:=),знаков операций +, -, *, / и круглых скобок.

 

Свертка объектного кода.

9.

Рехэширо-

вание с использо-ванием псеводо-случайных  чисел

do {...} while(...),

разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

integer

Комментарий в круглых скобках  со звездочкой: (*...*).

арифметические выражения, разделенные  символом ;

(точка с запятой), состоят из

идентификаторов, шестнадцатеричных  чисел, знака присваивания (:=),

знаков операций +, -, *, / и круглых  скобок.

Исключение лишних операций

10.

Рехэши-

рование с помощью произведения

do {...} while(...),

разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

integer

Комментарий за двойной  косой чертой до конца строки: //....

логические выражения, разделенные  символом; (точка

с запятой), состоят из идентификаторов, шестнадцатеричных чисел, знака  присваивания (:=), знаков операций or, xor, and, not

и круглых скобок.

Свертка объектного кода.

11.

Метод цепочек

while(...) {...}

разделенные

символом ; (точка с  запятой).

if... then ... else и if... then,

разделенные символом; (точка с  запятой).

integer

Комментарий в круглых скобках  со звездочкой: (*...*).

Операторы условия содержат идентификаторы, знаки сравнения <, >, =, шестнадцатеричные  числа, знак присваивания (:=), знаков операций +, -, *, / и круглых скобок.

 

Исключение лишних операций

12.

Простой список.

for (...; ...; ...) do, разделенные

символом ; (точка с запятой).

if... then ... else и if... then,

разделенные символом; (точка с  запятой).

integer

Комментарий за двойной  косой чертой до конца строки: //....

Операторы цикла содержат идентификаторы,

знаки сравнения <, >, =, шестнадцатеричные  числа, знак присваивания (:=),знаков операций +, -, *, / и круглых скобок.

 

Свертка объектного кода.

13.

Упорядо-ченный список

do {...} while(...),

разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

char

Комментарий за двойной  косой чертой до конца строки: //....

арифметические выражения, разделенные  символом ;

(точка с запятой), состоят из  идентификаторов,

символьных констант (один символ в одинарных кавычках), знака присваивания (:=), знаков операций +, -, *, / и круглых скобок.

Свертка объектного кода.

14.

Бинарное дерево

while(...) {...}

разделенные

символом ; (точка с  запятой).

if... then ... else и if... then,

разделенные символом; (точка с  запятой).

char

Комментарий внутри косых  черт со звездочкой: /*...*/.

логические выражения, разделенные  символом; (точка

с запятой), состоят из идентификаторов, символьных

констант 'T' и 'F', знака присваивания (:=), знаков операций or, xor, and, not

и круглых скобок. Арифметические операции включают знаки операций +, - и круглых

скобок.

 

Свертка объектного кода.

15.

Рехэши-

рование с помощью произведения

for (...; ...;...) разделенные

символом ; (точка с  запятой).

условия типа if... then ... else и if... then,

разделенные символом; (точка с  запятой).

char

Комментарий внутри косых  черт со звездочкой: /*...*/.

Операторы условия содержат идентификаторы, знаки сравнения <, >, =, строковые  константы (последовательность символов в двойных кавычках), знак присваивания (:=). Арифметические операции включают знаки операций +, -и круглых

скобок.

 

Исключение лишних операций

16.

Метод цепочек

for (...; ...; ...) do, разделенные

символом ; (точка с запятой)

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

char

Комментарий в круглых скобках  со звездочкой: (*...*).

Операторы цикла содержат идентификаторы,

знаки сравнения <, >, =, строковые  константы (последовательность символов

в двойных кавычках), знак присваивания (:=). Арифметические операции включают знаки операций +, -,и круглых

скобок.

 

Исключение лишних операций

17.

Рехэширо-

вание с использо-ванием псеводо-случайных  чисел

do {...} while(...),

разделенные

символом ; (точка с  запятой).

if( ... ) ....else...

разделенные символом ; (точка  с запятой)

float

Комментарий за двойной  косой чертой до конца строки: //....

выражения, разделенные символом ;

(точка с запятой). состоят из  идентификаторов,

десятичных чисел с плавающей  точкой (в обычной и логарифмической  форме), знака присваивания (:=), знаков операций +, - и круглых скобок

Свертка объектного кода.

18.

Простое

рехэши

-рование 

while(...) {...}

разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

integer,

char

Комментарий в круглых скобках  со звездочкой: (*...*).

логические выражения, разделенные  символом; (точка с запятой), состоят из идентификаторов, констант true и false, знака присваивания (:=), знаков операций or, xor, and, not и круглых скобок. Арифметические операции включают знаки операций +, -  и круглых

скобок.

 

Исключение лишних операций.

19.

Рехэши-

рование с помощью произведения

for (...; ...;...)

разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

double

Комментарий в фигурных скобках: {...}.

Операторы условия содержат идентификаторы, знаки сравнения <, >, =, десятичные числа с плавающей точкой

(в обычной и логарифмической  форме), знак присваивания (:=).Арифметические операции включают знаки операций +, -и круглых

скобок.

 

Свертка объектного кода.

20.

Метод цепочек

for (...; ...;...) разделенные

символом ; (точка с  запятой).

if... then ... else …

if... then …,

разделенные символом ; (точка  с запятой)

float

Комментарий в круглых скобках  со звездочкой: (*...*).

Операторы цикла содержат идентификаторы,

знаки сравнения<, >, =, десятичные числа с плавающей точкой (в обычной

и логарифмической форме), знак присваивания (:=). Арифметические операции включают знаки операций +, - и круглых

скобок.

 

Исключение лишних операций

21.

Рехэши-

рование с помощью произведения

while(...) {...}

разделенные

символом ; (точка с  запятой).

if... then ... else … 

if... then …,

разделенные символом ; (точка  с запятой)

integer

Комментарий внутри косых  черт со звездочкой: /*...*/.

арифметические выражения, разделенные символом

; (точка с запятой). Состоят из  идентификаторов,

римских чисел, знака присваивания (:=), знаков операций +, -, *, / и круглых

скобок.

Исключение лишних операций

22.

Бинарное дерево

 for (...; ...; ...) do, разделенные

символом ; (точка с запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

char

Комментарий внутри косых  черт со звездочкой: /*...*/.

Логические выражения, разделенные  символом; (точка с запятой). Логические выражения состоят из идентификаторов, констант

0 и 1, знака присваивания (:=), знаков  операций or, xor, and, not и круглых скобок. Арифметические операции включают знаки операций +, - и круглых скобок.

 

Исключение лишних операций

23.

Упорядо-ченный список

while(...) {...}

разделенные

символом ; (точка с запятой).

if... then ... else и if... then,

разделенные символом ; (точка с  запятой).

integer

Комментарий в фигурных скобках: {...}.

Операторы условия содержат идентификаторы, знаки сравнения <, >, =, римские  числа, знак присваивания (:=).Арифметические операции включают знаки операций +, -, *, / и круглых скобок.

 

Свертка объектного кода.

24.

Метод цепочек

for (...; ...; ...) do, разделенные

символом ; (точка с запятой).

if... then ... else и if... then,

разделенные символом ; (точка с запятой).

integer

Комментарий в круглых скобках  со звездочкой: (*...*).

Операторы цикла содержат идентификаторы,

знаки сравнения <, >, =, римские числа, знак присваивания (:=).Арифметические операции включают знаки операций +, - и круглых

скобок.

 

Исключение лишних операций

25.

Рехэширо-

вание с использо-ванием псеводо-случайных  чисел

while(...) {...}

разделенные

символом ; (точка с  запятой).

if... then ... else и if... then,

разделенные символом; (точка с  запятой).

int

Комментарий в круглых скобках  со звездочкой: (*...*).

арифметические выражения, разделенные  символом ;

(точка с запятой), состоят из

идентификаторов, шестнадцатеричных  чисел, знака присваивания (:=),

знаков операций +, -, *, / и круглых  скобок.

Исключение лишних операций

26.

Рехэши-

рование с помощью произведения

do {...} while(...),

разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

int

Комментарий в фигурных скобках: {...}.

логические выражения, разделенные  символом; (точка

с запятой), состоят из идентификаторов, шестнадцатеричных чисел, знака присваивания (:=), знаков операций or, xor, and, not и круглых скобок. Арифметические операции включают знаки операций +, -  и круглых

скобок.

 

Свертка объектного кода.

27.

Метод цепочек

for (...; ...; ...) do, разделенные

символом ; (точка с запятой).

if... then ... else и if... then,

разделенные символом; (точка с  запятой).

integer

Комментарий за двойной  косой чертой до конца строки: //....

Операторы условия содержат идентификаторы, знаки сравнения <, >, =, шестнадцатеричные числа, знак присваивания (:=).Арифметические операции включают знаки операций +, -, *, / и круглых скобок.

 

Свертка объектного кода.

28.

Простой список.

do {...} while(...),

разделенные

символом ; (точка с  запятой).

if... then ... else и if... then,

разделенные символом; (точка с  запятой).

int

Комментарий за двойной  косой чертой до конца строки: //....

Операторы цикла содержат идентификаторы,

знаки сравнения <, >, =, шестнадцатеричные  числа, знак присваивания (:=). Арифметические операции включают знаки операций +, -  и круглых

скобок.

 

Свертка объектного кода.

29.

Упорядо-ченный список

for (...; ...; ...) do, разделенные

символом ; (точка с запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

char

Комментарий за двойной  косой чертой до конца строки: //....

арифметические выражения, разделенные  символом ;

(точка с запятой), состоят из  идентификаторов,

символьных констант (один символ в одинарных кавычках), знака присваивания (:=), знаков операций +, -, ^(степень) и круглых скобок.

Исключение лишних операций

30.

Бинарное дерево

while(...) {...}

разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

char

Комментарий внутри косых  черт со звездочкой: /*...*/.

логические выражения, разделенные  символом; (точка

с запятой), состоят из идентификаторов, символьных

констант 'T' и 'F', знака присваивания (:=), знаков операций or, xor, and, not

и круглых скобок. Арифметические операции включают знаки операций +, -  и круглых скобок.

 

Исключение лишних операций

31.

Рехэши-

рование с помощью произведения

do {...} while(...),

разделенные

символом ; (точка с  запятой).

if... then ... else и if... then,

разделенные символом; (точка с  запятой).

char

Комментарий внутри косых черт со звездочкой: /*...*/.

Операторы условия содержат идентификаторы, знаки сравнения <, >, =, строковые  константы (последовательность символов в двойных кавычках), знак присваивания (:=). Арифметические операции включают знаки операций +, -  и круглых скобок.

 

Исключение лишних операций

32.

Метод цепочек

for (...; ...; ...) do, разделенные

символом ; (точка с запятой)

if... then ... else и if... then,

разделенные символом; (точка с  запятой).

char

Комментарий в круглых скобках  со звездочкой: (*...*).

Операторы цикла содержат идентификаторы,

знаки сравнения <, >, =, строковые  константы (последовательность символов

в двойных кавычках), знак присваивания (:=). Операции над строками + (конкатенация), обращение (~). Для оператора цикла используются операции, ++ (инкремент), -- (декремент).

 

Исключение лишних операций

33.

Метод цепочек

do {...} while(...),

разделенные

символом ; (точка с  запятой).

if( ... ) ....else...

разделенные символом ; (точка  с запятой)

double

Комментарий в фигурных скобках: {...}.

выражения, разделенные символом ;

(точка с запятой). состоят из  идентификаторов,

десятичных чисел с плавающей  точкой (в обычной и логарифмической  форме), знака присваивания (:=), знаков операций +, -, *, / , ^ (степень) и круглых скобок

Свертка объектного кода.

.

34.

Рехэши-

рование с помощью произведения

while(...) {...}

разделенные

символом ; (точка с  запятой).

if( ... ) ....else..

разделенные символом ; (точка  с запятой).

int

Комментарий в круглых скобках  со звездочкой: (*...*).

логические выражения, разделенные символом; (точка с запятой), состоят из идентификаторов, констант true и false, знака присваивания (:=), знаков операций or, xor, and, not и круглых скобок.

Исключение лишних операций

35.

Упорядо-ченный список

for (...; ...;...)

разделенные

символом ; (точка с  запятой).

if... then ... else … 

if... then …,

разделенные символом ; (точка с  запятой)

float

Комментарий за двойной косой чертой до конца строки: //....

Операторы условия содержат идентификаторы, знаки  сравнения <, >, =, десятичные числа с плавающей точкой

(в обычной  и логарифмической форме), знак  присваивания (:=).Для оператора цикла используются операции, ++ (инкремент), -- (декремент).

Исключение  лишних операций

Информация о работе Создание компилятора с заданного подмножества языка