- •Курсовой проект по СПО на тему: «Компилятор»
- •Результаты
- •Компилятор – транслятор, осуществляющий перевод исходной программы в эквивалентную ей объектную программу на
- •Таблица идентификаторов – специальным образом организованные наборы данных, служащие для хранения информации об
- •Метод рехэширования с помощью произведения
- •Блок-схема добавления элемента в ТИ по методу
- •Блок-схема алгоритма поиска элемента в ТИ,
- •Метод организации ТИ простым списком
- •Блок-схема добавления элемента в ТИ по методу
- •Блок-схема алгоритма поиска элемента в ТИ,
- •Лексический анализатор
- •Граф конечного детерминированного автомата
- •Пример обработки текстового файла
- •Результаты обработки текстового
- •Синтаксический анализатор
- •Контекстно-свободная грамматика в форме
- •Множества крайних левых и крайних правых
- •Множества крайних левых и крайних правых
- •Остовная грамматика G’, полученная на основе
- •Результаты работы синтаксического
- •Заключение
Лексический анализатор
Лексический анализ – часть компилятора, которая читает литеры программы на исходном языке и строит из них слова – лексемы.
Граф переходов КА – направленный нагруженным однонаправленным граф, в котором вершины представляют состояния, дуги отображают переходы из одного состояния в другое, а символы нагрузки (метки) дуг соответствуют функции перехода.
Системное Программное Обеспе чение
Граф конечного детерминированного автомата
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
Системное Программное Обеспе чение
Результаты работы синтаксического
анализатора (фрагмент)
Системное Программное Обеспе чение
