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

3.1 Описание типов лексем

На этапе лексического анализа решаются следующие задачи:

  • Чтение исходной программы и выделение из нее лексем

  • Построение таблиц идентификаторов и констант

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

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

  1. Лексический анализ проводится без учета регистра символа.

  2. Так как синтаксисом разрабатываемого языка не предусмотрены комментарии, то все символы, встречающиеся при лексическом анализе, относятся к основному тексту программы.

  3. При лексическом анализе будем выделять следующие типы лексем:

Тип лексемы

Описание

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

void main if else for goto cin<< cout >> or and not vector

Описатель

int float bool

Разделитель

, . ; : { } [ ] ?

Натуральное число

Последовательность символов, состоящая только из цифр и не начинающаяся с нуля.

Оператор

+= -= *= = *= /= + - * / ++ -- < > <= >= != == ~

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

Последовательность символов, состоящая из букв и цифр, не начинающаяся с цифры.

Индекс

Значение

Индекс

Значение


Таблица ключевых слов Таблица описателей

Индекс

Значение


Таблица разделителей Таблица констант

Индекс

Значение


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

Индекс

Значение

Индекс

Значение


  1. Определим типы токенов, которые мы можем получить на выходе лексического анализатора.

Токен

Лексемы

Языковая конструкция

Ident

Var, Label

Идентификатор- последовательность символов, состоящая из букв и цифр, не начинающаяся с цифры.

IF

if

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

ELSE

else

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

MAIN

main

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

VOID

void

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

FOR

for

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

GOTO

goto

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

CIN<<

cin<<

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

COUT>>

cout>>

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

OR

or

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

AND

and

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

NOT

not

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

CI

NatNumber, Number, Dimension, Index

Целочисленные константы

CF

FloatNumber

Вещественные константы

VEC

Vector

Вектор

VECTOR

vector

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

TypeBase

int, float, bool

Базовые типы данных

AssignRel

+= -= *= /= =

Отношение присваивания

AddOperation

+ -

Аддитивная операция

MultOperation

* /

Мультипликативная операция

RelOperation

< > <= >= == !=

Операция отношения

UnaryOperation

++ --

Унарная операция

(

(

Разделитель (

)

)

Разделитель )

[

[

Разделитель [

]

]

Разделитель ]

,

,

Разделитель ,

.

.

Разделитель .

;

;

Разделитель ;

{

{

Разделитель {

}

}

Разделитель }

Separator

: ?

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

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

Тип «Ключевое слово»

Номер таблицы

Индекс

Значение

0

0

void

1

0

main

2

0

if

3

0

else

4

0

for

5

0

goto

6

0

vector

Тип «Оператор ввода-вывода»

Номер таблицы

Индекс

Значение

7

0

cin<<

1

cout>>

Тип «Описатель»

Номер таблицы

Индекс

Значение

8

0

int

1

float

2

bool

Тип «Логическое отношение»

Номер таблицы

Индекс

Значение

9

0

not

10

0

and

11

0

or

Тип «Оператор присваивания»

Номер таблицы

Индекс

Значение

12

0

+=

13

0

-=

14

0

*=

15

0

/=

16

0

=

Тип «Бинарная операция»

Номер таблицы

Индекс

Значение

17

0

+

1

-

18

0

*

1

/

Тип «Унарная операция»

Номер таблицы

Индекс

Значение

19

0

++

20

0

--

Тип «Оператор длины»

Номер таблицы

Индекс

Значение

21

0

~

Тип «Разделитель»

Номер таблицы

Индекс

Значение

22

0

,

1

.

2

;

3

:

4

{

5

}

6

[

7

]

8

(

9

)

10

?

Тип «Отношение»

Номер таблицы

Индекс

Значение

23

0

<

1

>

2

<=

3

>=

4

==

5

!=

Тип «Идентификатор»

Номер таблицы

Индекс

Значение

24

0

n

Тип «Целочисленная константа»

Номер таблицы

Индекс

Значение

25

0

m

Тип «Вещественная константа»

Номер таблицы

Индекс

Значение

26

0

m

Тип «Метка»

Номер таблицы

Индекс

Значение

27

0

k