Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по ТЯП. / готовый курсовик.doc
Скачиваний:
36
Добавлен:
01.05.2014
Размер:
1.2 Mб
Скачать

3.2 Функции лексического анализатора

  • IDENT - ищет текущий идентификатор в таблице идентификаторов. Если таковой в таблице имеется, то во входной поток записывается токен, соответствующий этой лексеме, иначе – вставляет запись об этом идентификаторе в таблицу идентификаторов и пишет в выходной поток IDENT.

  • VOID, MAIN,VECTOR, IF, FOR ELSE, CIN>> , COUT<<, GOTO, AND, NOT,OR –соответствующая лексема записывается в выходной поток(так как формально каждое ключевое слово хранится в отдельной таблице).

  • Separator – пишет в выходной поток конкретный разделитель.

  • NatNumber - ищет текущую константу в таблице констант(если не находит, то записывает туда) и выводит в выходной поток токен NatNumber.

  • AssignRel - пишет в выходной поток конкретный разделитель, так как они хранятся в разных таблицах.

  • AddOperation – пишет в выходной поток токен AddOperation.

  • MultOperation– пишет в выходной поток токен MultOperation.

  • RelOperation- пишет в выходной поток токен RelOperation

  • UnaryOperation – пишет в выходной поток конкретную унарную операцию.

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

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

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

0

a

1

b

2

c

таблица целочисленных констант

0

5

1

3

2

1

таблица вещественных констант

0

2.0

1

4.1

Исходная программа будет выглядеть как

№ таблицы

Индекс

0

0

1

0

22

8

22

9

22

4

8

0

24

0

22

2

24

0

16

0

25

0

22

2

6

0

24

1

22

6

25

1

22

7

22

2

24

1

16

0

22

6

26

0

22

0

24

0

22

0

26

1

22

7

22

2

2

0

22

8

24

1

22

6

25

2

22

7

23

4

24

0

22

9

7

1

24

0

22

2

22

5

На выходе лексического анализатора программа будет представлена потоком токенов

VOID

MAIN

(

)

{

TypeBase

Ident

;

Ident

AssignRel

CI

;

VECTOR

Ident

[

CI

]

;

Ident

=

[

CF

,

CF

,

CF

]

;

IF

(

CF

RelOperation

Ident

)

COUT>>

Ident

;

}

4 Описание этапа синтаксического анализа

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

4.1 Исходная порождающая кс-грамматика

P – начальный нетерминальный символ.

P → void main() { DeclarVar DeclarVector CompositeOperator }

DeclarVar → TypeBase Ident DeclarVar;

DeclarVar →

DeclarVector → vector Ident [Dimension] DeclarVector

DeclarVector →

CompositeOperator →{ SeqOperator}

SeqOperator → Operator ; SeqOperator

SeqOperator →

Operator → [Label]: NonMarkedOperator

Operator → NonMarkedOperator

NonMarkedOperator → CompositeOperator

NonMarkedOperator → AssignOperator

NonMarkedOperator → ConAssignOperator

NonMarkedOperator → ConditionOperator

NonMarkedOperator → LoopOperator

NonMarkedOperator → GotoOperator

NonMarkedOperator → InputOperator

NonMarkedOperator → OutputOperator

ConAssignOperator → ( Logical Expr ) ? Expr : Expr

AssignOperator → Var AssignRel Expr

ConditionOperator → if ( LogicalExpr ) CompositeOperator

ConditionOperator → if ( LogicalExpr ) CompositeOperator else CompositeOperator

LoopOperator → for( AssignOperator ; LogicalExpr; AssignOperator) CompositeOperator

GotoOperator → goto Label

InputOperator → cin>>Var

OutputOperator → cout<< Var

Expr → Expr AddOperation Item

Expr → Item

Expr → Item UnaryOperation

Expr → ~ Vector

Item → Item MultOoperation Factor

Item →Factor

Factor → Var

Factor → ( Expr )

LogicalExpr → Con or Con

LogicalExpr → Relation

Con → LogicalFactor and LogicalFactor

LogicalFactor → ( LogicalExpr )

LogicalFactor → (Relation)

LogicalFactor →not LogicalFactor

Relation →Expr RelOperation Expr

Var → Ident

Var → Vector

Label → Ident

Number →0

Number → NatNumber

NNumber → Number NNumber

NNumber →

Dimension → NatNumber

Dimension → NatNumber NNumber

Index → 0

Index → NatNumber Index

Vector → Ident

Vector → [ VectorElem NVectorElem ]

NVectorElem → , VectorElem

NVectorElem →

VectorElem →Ident [ Index]

VectorElem → Ident

VectorElem → FloatNumber

FloatNumber → NatNumber NNumber . NNumber