Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2008-04-14-02-21-Наталья-.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
825.86 Кб
Скачать

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

На входе лексического анализатора находится последовательность символов представляющая программу на входном языке. Задача лексического анализатора состоит в разделении этой последовательности на слова языка (лексемы).

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

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

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

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

3.1. Определение типов лексем

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

  • идентификаторы;

  • константы (числовые, строковые, символьные);

  • ключевые слова входного языка;

  • знаки операций (арифметические, логические, отношения);

  • разделители.

Типы лексем запишем в виде таблицы (см. табл. 4).

Табл. 4.

Тип

Лексемы

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

a, A, ...., z, Z

Константы

0, 1, ..., 9

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

void, main, if, else, for, goto, cin<<, cout >>, or, and, not, vector, int, float, boolean

Знаки операций

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

Разделители

, . ; : { } [ ] ? < > = + -

Соотношения между токенами и лексемами для различных языковых конструкций иллюстрируется в табл. 5.

Табл. 5.

Токен

Лексемы

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

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

:, ?

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

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

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

Индекс

Значение

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

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

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

Индекс

Значение

27

0

k

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

Индекс

Значение

26

0

m