Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Язык постфиксного промежуточного представления.

К А З А Н С К И Й Г О С У Д А Р С Т В Е Н Н Ы Й

У Н И В Е Р С И Т Е Т

Кафедра теоретической кибернетики

К У Р С " Языки и методы программирования "

(для студентов 2 куpса)

Семестровое задание №1.

Цель: Отработка техники построения программ лексического и синтаксического

анализа на основе языка программирования ПАСКАЛЬ(DELPHI). Изложение

дальнейшего материала дается в терминах ПАСКАЛЯ, однако задания можно выполнять также на С++.

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

Срок выполнения: 2-месяца.

Пояснения к заданию:

Язык арифметических выражений.

Выражения строятся из простых переменных, констант (типа integer или real),

знаков операций (+, -, *, /, DIV, MOD) и функций.

Например: (a1+a2)*(b1-b2 DIV b3)-15+F(x,y,z).

Язык фукционального программирования.

Программы строятся в виде суперпозиции функций. Например:

F1(G1(x,y),G2(a,b,c)). Каждая функция представляется в виде

полноскобочного представления вида (F, p1, p2, …, pn), где

F-наименование функции, p1, p2, …, pn – аргументы (параметры),

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

(типа integer, real, boolean) или в свою очередь полноскобочным выражением.

Например (F1,(G1,x,y),(G2,a,b,c)).

Язык префиксного промежуточного представления.

Промежуточное представление программы получается в результате полного синтаксического разложения программы и затем используется для

дальнейшей генерации кода или интерпретации. Промежуточное представление является структурным списком, который описывается

динамическим типом языка ПАСКАЛЬ.

 

KOD NAME LL RL

 

type list=^element;

element=record

KOD:0..4;

NAME:string;

LL:list;

RL:list

end;

{ 1- если поле NAME определяет имя функции (или знак операции)

KOD= { 2- если поле NAME определяет имя переменной

{ 3- если поле NAME определяет константу

{ 4- поле NAME – пустая строка, поле LL ссылается на другой

{ список (нижний уровень иерархии)

 

LL-ссылка на нижний уровень иерархии, RL ссылка на следующий элемент данного уровня иерархии.

LL=> NIL, если KOD= 1 | 2 | 3

 

Пример:(F, x,(G,z,15))

           
     


1 G
NIL

 

NIL NIL

 

 


2 Z
3 15
NIL

                       
       
         
 

 


NIL

 

 

Язык постфиксного промежуточного представления.

В постфиксном представлении знак операции (функции) указывается после аргументов.

Вид представления:

 
 

 

 


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

 

Пример: ((15,z,G),x,F) (префиксное представление (F, x,(G,z,15)))

 

NIL

           
     
 

 

 


NIL NIL

 

NIL

           
     

 

 


NIL NIL NIL

 

Примерные задания.

1. Преобразовать арифметическое выражение, не содержащее скобок (и соответственно функциональных символов) в промежуточное представление.

Например, A1+B1-X/15.5.

 

2. Получить из промежуточного представления арифметическое выражение.

 

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

 

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

полноскобочное представление.

 

6.Запрограммировать процесс интерпретации промежуточного представления арифметического выражения, ограничившись только знаками операций +, -,*, /.

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

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

 

7. Преобразовать арифметическое выражение, не содержащее скобок (и соответственно функциональных символов) в полноскобочное представление.

Например, A1+B1-X/15.5 => (-, (+, A1, B1), (/, X, 15.5))

 

8. Преобразовать полноскобочное представление арифметического выражения в обычное арифметическое выражение.

Например, (-, (+, A1, B1), (/, X, 15.5)) => A1+B1-X/15.5

 

9. Выполнить проверку парности открывающих и закрывающих скобок в

обычном арифметическом выражении.

 

10. Выполнить проверку парности открывающих и закрывающих скобок в

полноскобочном представлении.

 

11. Выполнить проверку соответствия типов в операциях (функциях) на

основе промежуточного представления. Тип переменной определяется

первой буквой ее наименования (I – Integer, R-real, B-Boolean). Если

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

таблицу схем операций (функций). Например, (+,Integer,integer) => integer.

 

12. На основе промежуточного представления создать линейный список, содержащий

список наименований используемых операций (функций).

 

13. Преобразовать префиксное промежуточное представление в постфиксное.

 

14. Преобразовать постфиксное промежуточное представление в префиксное.

 

15.Запрограммировать процесс интерпретации постфиксного промежуточного представления арифметического выражения, ограничившись только знаками операций +, -,*, /.

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

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

 

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

(+,(-,a1,b1),(*,c1,15)) – выражение корректное; (+,(-,a,b),(*,c1,1d1)) – в выражении допущена ошибка (1d1- не является идентификатором).

 

17.Для заданного промежуточного представления получить списки наименований операций, функций, переменных и констант. Например, если промежуточное представление получено из выражения F(X1,255)+G(X1*Y1/16,Y2), то в результате мы должны получить (+,*) –список операций, (F,G) –список функций, (X1,Y1,Y2) – список переменных, (255,16) – список констант.

 

18.Для заданного полноскобочного представления получить списки наименований операций, функций, переменных и констант. Например, если промежуточное представление получено из выражения F(X1,255)+G(X1*Y1/16,Y2), то в результате мы должны получить (+,*) –список операций, (F,G) –список функций, (X1,Y1,Y2) – список переменных, (255,16) – список констант.

 



<== предыдущая лекция | следующая лекция ==>
 | О проведении выставки-ярмарки народных промыслов и ремесел
Поделиться с друзьями:


Дата добавления: 2016-11-23; Мы поможем в написании ваших работ!; просмотров: 243 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

В моем словаре нет слова «невозможно». © Наполеон Бонапарт
==> читать все изречения...

2174 - | 2121 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.