Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конпект лекций по ТЯПиМТ.docx
Скачиваний:
207
Добавлен:
27.01.2015
Размер:
329.63 Кб
Скачать

9. Формирование таблиц лексем и построение дескрипторного текста исходной программы.

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

PROGRAM PRIMER;

VAR X,Y,Z : REAL;

BEGIN

X:=5;

Z:=X+Y;

END;

Применим следующие коды для типов лексем:

К1- ключевое слово;

К2- разделитель;

К3- идентификатор;

К4- константа.

Лексический анализ можно производить, если нам задан алфавит,

список ключевых слов языка и служебных символов. Пусть всё это

имеется. Тогда внутренние таблицы сканера примут следующий вид.

Таблица 1. Ключевые слова.

Ключевое слово

1

PROGRAM

2

BEGIN

3

END

4

FOR

5

REAL

6

VAR

Таблица 2. Разделители.

Разделители

1

;

2

,

3

+

4

-

5

/

6

*

7

:

8

=

9

.

Результат работы сканера таблица идентификаторов и таблица констант

Таблица 3. Идентификаторы.

Идентификаторы

1

PRIMER

2

X

3

Y

4

Z

Таблица 4. Константы.

Знач. констант

1

5

2

6

На основании составленных таблиц можно записать входной текст через введённые дескрипторы (дескрипторный текст):

( К1, 1) (К3, 1) (K2, 1)

( K1, 6) (K3, 2) (K2, 2) (k3, 3) ( K2, 2) (K3, 4) ( K2, 7) (K1, 5) (K2, 1)

( K1, 2)

( K3, 2) (K2, 7) (K2, 8) (K4, 1) (K2, 1)

( K3, 3) (K2, 7) (K2, 8) (K4, 2) (K2, 1)

( K3, 4) (K2, 7) (K2, 8) (K3, 2) (K2, 3) (K3, 3) (K2, 1)

( K1, 3) (K2, 9).

10. Синтаксический анализ. Метод рекурсивного спуска.

Грамматика алгоритмического языка может задаваться в виде диаграмм Вирта, Бекуса-Наура формах и в виде формальной грамматики. Формальные грамматики предпочтительнее, поскольку широко используются как в теории, так и в практике разработки и построения трансляторов с языков программирования.

Формальная грамматика − это совокупность четырёх объектов: множества нетерминальных символов {N}, множества терминальных символов {T}, множества продукций {P} и аксиомы грамматики S, из которой с помощью продукций могут быть выведены все сентенции и сентенциальные выражения данного языка.

11. Пример грамматики упрощенного языка Паскаль.

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

1. <PROG>→program<PROGRAM-NAME>var<DEC-LIST>begin<STMT-

LIST>END.

Это, по сути, исходная запись и она же продукция. Прочие продукции будут иметь вид:

2. <PROG-NAME> →id

3. <DEC-LIST>→ <DEC>|<DEC-LIST>;<DEC>

4. <DEC> →<ID-LIST>:<TYPE>

5. <TYPE> → integer

6. <ID-LIST> →id|<ID-LIST>, id

7. <STMT-LIST>→<STMT>|<STMT-LIST>;<STMT>

8. <STMT>→<ASSIGN>|<READ>|<WRITE>|<FOR>

9. <ASSIGN> →id:=<EXP>

10. <EXP> →<TERM>|<EXP>+<TERM>|<EXP> - <TERM>

11. <TERM>→ <FACTOR>|<TERM>*<FACTOR>|<TERM> div

<FACTOR>

12. <FACTOR> →id|int|(EXP)

13. <READ> →read(<ID-LIST>)

14. <WRITE> →write(<ID-LIST>)

15. <FOR>→ for<INDEX-EXP> do <BODY>

16. INDEX-EXP>→ id:=<EXP> to <EXP>

17. <BODY>→ <STMT>|begin<STMT-LIST> end

Следует иметь ввиду, что под id подразумевается имя любого идентификаторы, под int – целая константа.