Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Написание компилятора - файл 1.doc


Написание компилятора
скачать (672 kb.)

Доступные файлы (1):

1.doc672kb.04.12.2011 20:35скачать

содержание
Загрузка...

1.doc

  1   2   3   4   5
Реклама MarketGid:
Загрузка...




Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение

Высшего профессионального образования

«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Факультет информационных технологий
Кафедра программного обеспечения вычислительной техники и
автоматизированных систем
РАСЧЁТНО-ГРАФИЧЕСКАЯ РАБОТА
по дисциплине «Теория языков программирования»
ГОУ ОГУ 230105.65.4006.13 О

Руководитель

___________Ишакова Е.Н.

«___»___________2007 г.

Исполнители

студенты гр. 04 ПОВТ У

___________Саитова И.С.

«. .». .2007 г.

Оренбург 2007

Содержание


2.2 Синтаксический анализатор программы 9

2.3 Семантический анализатор програмы 13

2.4 Генерация и интерпретация ПОЛИЗа програмы 15


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

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

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

2.1 Разработать синтаксический анализатор текста программы на модельном языке методом рекурсивного спуска.

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

3.1 Дополнить разработанный синтаксический анализатор процедурами проверки семантической правильности программы на модельном языке в соответствии с контекстными условиями вашего варианта.

3.2 Распечатать пример таблиц идентификаторов и двуместных операций.

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

4.1 Записать правила вывода грамматики с действиями по переводу в ПОЛИЗ программы на модельном языке.

4.2 Пополнить разработанное программное средство процедурами, реализующими генерацию внутреннего представления введенной программы в форме ПОЛИЗа.

4.3 Разработать интерпретатор ПОЛИЗа программы на модельном языке.

4.4 Составить набор контрольных примеров, демонстрирующих:

4.4.1 Перевод в ПОЛИЗ различных конструкций языка;

4.4.2 Ход интерпретации синтаксически и семантически правильной программы с помощью таблицы.
2 Основная часть
2.1 Лексический анализатор программы
Лексический анализатор (ЛА) – это первый этап процесса компиляции, на котором символы, составляющие исходную программу, группируются в отдельные минимальные единицы текста, несущие смысловую нагрузку – лексемы.

Задача лексического анализа - выделить лексемы и преобразовать их к виду, удобному для последующей обработки. ЛА использует регулярные грамматики.

ЛА необязательный этап компиляции, но желательный по следующим причинам:

1) замена идентификаторов, констант, ограничителей и служебных слов лексемами делает программу более удобной для дальнейшей обработки;

2) ЛА уменьшает длину программы, устраняя из ее исходного представления несущественные пробелы и комментарии;

3) если будет изменена кодировка в исходном представлении программы, то это отразится только на ЛА.

В процедурных языках лексемы обычно делятся на классы:

  1. служебные слова;

  2. ограничители;

  3. числа;

  4. идентификаторы.

Каждая лексема представляет собой пару чисел вида (n, k), где n – номер таблицы лексем, k - номер лексемы в таблице.

Входные данные ЛА - текст транслируемой программы на входном языке.

Выходные данные ЛА - файл лексем в числовом представлении.

1) Таблица служебных слов содержит:

1) program;

2) var;

3) begin;

4) end;

5) int;

6) float;

7) bool;

8) if;

9) then;

10) else;

11) while;

12) do;

13) readln;

14) writeln;

15) true

16) false

17) ass;

18) and;

19) or;

20) for;

21) to;

22) do;

23) not.

2) Таблица ограничителей содержит:

    1. .

    2. ,

    3. :

    4. ;

    5. {

    6. }

    7. (

    8. )

    9. <>

    10. =

    11. <

    12. >

    13. <=

    14. >=

    15. +

    16. -

    17. /

    18. *

Таблицы 3) чисел и 4) идентификаторов формируются в ходе лексического анализа.

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

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

1) СН – очередной входной символ;

2) S буфер для накапливания символов лексемы;

3) B – переменная для формирования числового значения константы;

  1. CSтекущее состояние буфера накопления лексем с возможными значениями: Н – начало, I – идентификатор, N – число, С – комментарий, M – конец программы («.»), D – дробное число, D1 – знак после «е», D2 – считывание степени, D3 – запись дробного числа, NB – запись 2-го числа, NV – запись 8-го числа, NS – 16-го числа, ND – запись десятичного числа, NH – проверка 16-е число или ошибка, L1 – проверка знака «>=» и «<>», L2 –проверка знака «<=», V – выход, ER –ошибка;

  2. t - таблица лексем анализируемой программы с возможными значениями: TWтаблица служебных слов М-языка, TL – таблица ограничителей М-языка, TI – таблица идентификаторов программы, TC – таблица целых чисел, TD – таблица вещественных чисел;

  3. z - номер лексемы в таблице t (если лексемы в таблице нет, то z=0).

LEX – переменная, содержащая текущую лексему, считанную из файла лексем;

8) gl – процедура считывания очередной лексемы из файла лексем в переменную LEX;

9) EQ(S) – логическая функция, проверяющая, является ли текущая лексема LEX лексемой для S;

10) NUM - логическая функция, проверяющая, является ли LEX числом.

Процедуры и функции:

1) gc – процедура считывания очередного символа текста в переменную СН;

2) let – логическая функция, проверяющая, является ли переменная СН буквой;

3) digit - логическая функция, проверяющая, является ли переменная СН цифрой;

4) nill – процедура очистки буфера S;

5) add – процедура добавления очередного символа в конец буфера S;

6) look(n,k) – процедура поиска лексемы из буфера S в таблице с номером n с возвращением номера лексемы в таблице, k – количество элементов в таблице;

7) put(t) – процедура записи лексемы из буфера S в таблицу t, если там не было этой лексемы, возвращает номер данной лексемы в таблице;

8) outt(n, k) – процедура записи пары чисел (n, k) в файл лексем;

9) perevod – процедура перевода в двоичное число;

10) nill – очистке бефера S;

11) letпроверка является ли символ буквой;

12) letAпроверка является ли символ буквой от A до H;

13) letGпроверка является ли символ буквой от G до Z;

14) dva(ss,step) – перевод числа в соответствии


‘ ‘

gc







look(TW)

add, gc

let or digit

null, add , gc

let

-


+


‘.’







out(1,2),

out(2,1)




out(1,2)


-

out(1, z)


put(TI), out(4, z)





let or digit



gc


‘.’

‘n’


‘d’

‘e’





‘{’

gc





digit


‘}’

  1   2   3   4   5



Скачать файл (672 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации