Скачиваний:
30
Добавлен:
02.05.2014
Размер:
531 Кб
Скачать

Лексический анализатор

Лексический анализ – часть компилятора, которая читает литеры программы на исходном языке и строит из них слова – лексемы.

Граф переходов КА – направленный нагруженным однонаправленным граф, в котором вершины представляют состояния, дуги отображают переходы из одного состояния в другое, а символы нагрузки (метки) дуг соответствуют функции перехода.

Системное Программное Обеспе чение

Граф конечного детерминированного автомата

Sign

1

35

p

 

e

 

i

 

 

t

 

b

 

r

 

u

 

a

 

 

x

 

o

 

n

<,>,=,+

;

-

:

 

(

)

c,d,f,g,h,j,

0,..,7

{

 

 

 

 

 

 

 

 

 

 

 

 

Err

..,m,q,..,s,

 

 

 

ID

 

ID

 

ID

 

 

ID

 

ID

 

ID

 

ID

 

ID

 

 

ID

 

ID

 

ID

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

53

32

 

 

v,w,y,z,

 

 

13

 

7

 

2

 

38

 

19

 

 

42

 

48

 

27

 

24

 

17

 

 

4

 

 

 

 

 

 

30

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

A,..,Z

 

не }

r

 

n

l

 

f

h

 

e

 

e

 

n

 

n

 

o

r

o

 

 

-

 

=

 

 

 

 

 

 

 

 

 

 

 

Err

 

 

}

14

ID

11

ID 8

ID

3

ID 39

ID

20

ID

43

ID

49

ID

28

ID

25

ID 18

ID 5

ID

 

54

 

 

 

 

 

 

 

 

o

 

d

 

s

 

e

 

g

 

p

 

t

 

d

 

r

 

t

 

 

 

;,)

 

ID

Err

ID

ID

ID

ID

ID

ID

ID

ID

ID

ID

 

 

 

 

 

 

15

 

12

 

9

 

40

 

21

 

44

 

50

 

29

 

26

 

6

 

 

 

 

 

 

0,..,7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Err

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

34

g

 

.

 

e

 

n

 

i

 

e

 

i

 

 

 

 

 

 

 

Sign

 

Sign

Sign

Sign

ID

Err

ID

ID

ID

ID

ID

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

16

 

36

 

10

 

41

 

22

 

45

 

51

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

ID

a

ID

l

ID

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

23

 

46

 

52

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

ID

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

47

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Err

1

 

 

ID

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a,..,z,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

33

A,..,Z,0,..,9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Err

 

 

 

 

Системное Программное Обеспе чение

Пример обработки текстового файла

prog

repeat

{начало цикла}

 

begin

if ((Cnt>-1)and(Result>0)) then

 

 

begin

 

 

Cnt--;

 

 

Result:=5-Cnt;

 

 

end

 

 

else

 

 

Cnt:=Result;

 

 

Var4:=-Cnt;

 

end

Sum:=Cnt+Result+Var4;

 

 

 

until((Sum=25)xor(Result>10));

{конец цикла}

end.

Системное Программное Обеспе чение

Результаты обработки текстового

файла (фрагмент)

Системное Программное Обеспе чение

Синтаксический анализатор

Синтаксический разбор – выделение синтаксических конструкций и проверка синтаксической правильности программы.

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

МП-автомат – недетерминированный конечный автомат со стековой (или магазинной) памятью. Переход из одного состояния в другое зависит не только от входного элемента, но и от одного или нескольких верхних символов магазина (стека).

Системное Программное Обеспе чение

Контекстно-свободная грамматика в форме

Бэкуса-Наура:

G({prog, end., if, then, else, begin, end, repeat, until, or, xor, and, not, <, >, =, (, ), –, +, um, dec, a, c, ;, :=}, {S, L, O, R, B, C, D, E, I, T, F}, P, S)

правила P:

S prog L end.

L O | L ; O | L ;

O if B then R else O | if B then O | begin L end | repeat O until B | a := E R if B then R else R | begin L end | repeat O until B | a := E

B B or C | B xor C | C C C and D | D

D E < E | E > E | E = E | ( B ) | not ( B )

E E I | E + T | T I → ( um I ) | F

T um T | F

F → ( E ) | a | c | a dec

Системное Программное Обеспе чение

Множества крайних левых и крайних правых

символов грамматики G .

 

 

 

Результат

 

 

 

 

 

 

 

 

L(U)

R(U)

 

 

 

 

 

 

 

S

prog

end.

 

 

 

 

 

 

 

L

O, L, if, begin, repeat, a

O, B, C, D, E, I, T, F, ;, end, ), a, c, dec

 

 

 

 

 

 

 

O

if, begin, repeat, a

O, B, C, D, E, I, T, F, end, ), a, c, dec

 

 

 

 

 

 

 

R

if, begin, repeat, a

R, B, C, D, E, I, T, F, end, ), a, c, dec

 

 

 

 

 

 

 

B

B, C, D, E, T, F, (, not, um, a, c

C, D, E, I, T, F, ), a, c, dec

 

 

 

 

 

 

 

C

C, D, E, T, F, (, not, um, a, c

D, E, I, T, F, ), a, c, dec

 

 

 

 

 

 

 

D

E, T, F, (, not, um, a, c

E, I, T, F, ), a, c, dec

 

 

 

 

 

 

 

E

E, T, F, (, um, a, c

I, T, F, ), a, c, dec

 

 

 

 

 

 

 

I

F, (, a, c

F, ), a, c, dec

 

 

 

 

 

 

 

T

F, um, (, a, c

T, F, ), a, c, dec

 

 

 

 

 

 

 

F

(, a, c

), a, c, dec

 

 

 

 

 

 

 

 

 

 

 

Системное Программное Обеспе чение

Множества крайних левых и крайних правых

терминальных символов грамматики G.

Результат

 

L(U)

R(U)

 

 

 

 

 

S

prog

end.

 

 

 

 

 

L

;, if, begin, repeat, a

;, else, then, end, until, :=, or, xor, and, <, >, =, ), -, +,

 

um, a, c, dec

 

 

 

 

 

 

 

 

O

if, begin, repeat, a

else, then, end, until, :=, or, xor, and, <, >, =, ), -, +, um,

 

a, c, dec

 

 

 

 

 

 

 

 

R

if, begin, repeat, a

else, end, until, :=, or, xor, and, <, >, =, ), -, +, um, a, c,

 

dec

 

 

 

 

 

 

 

 

B

or, xor, and, <, >, =, (, not, -, +, um, a, c

or, xor, and, <, >, =, ), -, +, um, a, c, dec

 

 

 

 

 

C

and, <, >, =, (, not, -, +, um, a, c

and, <, >, =, ), -, +, um, a, c, dec

 

 

 

 

 

D

<, >, =, (, not, -, +, um, a, c

<, >, =, ), -, +, um, a, c, dec

 

 

 

 

 

E

-, +, (, um, a, c

), -, +, um, a, c, dec

 

 

 

 

 

I

(, a, c

), a, c, dec

 

 

 

 

 

T

um, (, a, c

um, ), a, c, dec

 

 

 

 

 

F

(, a, c

), a, c, dec

 

 

 

 

 

 

 

 

 

Системное Программное Обеспе чение

Остовная грамматика G’, полученная на основе

исходной грамматики

G’({prog, end., if, then, else, begin, end, repeat, until, or, xor, and, not, <, >, =, (, ), –, +, um, dec, a, c, ;, :=}, {E, B}, P’, E)

правила P’:

E prog E end. – правило № 1

E E | E ; E | E ; – правила № 2 – 4

E if B then E else E | if B then E | begin E end | repeat E until B | a := E

правила № 5 – 9

E if B then E else E | begin E end | repeat E until B | a := E

– правила № 10 – 13

B B or B | B xor B | B – правила № 14 – 16 B B and B | B – правила № 17 и 18

B E < E | E > E | E = E | ( B ) | not ( B ) – правила № 19 – 23 E E I | E + E | E – правила № 24 – 26

E → ( um E ) | E – правила № 27 и 28 E um E | E – правила № 29 и 30

E → ( E ) | a | c | a dec – правила № 31 – 34

Системное Программное Обеспе чение

Результаты работы синтаксического

анализатора (фрагмент)

Системное Программное Обеспе чение

Соседние файлы в папке Курсовая СПО