Professional Documents
Culture Documents
Compilers - LL Grammars (Greek)
Compilers - LL Grammars (Greek)
: .
. ,
, 4
:
: .
, p q ,
/
( p, q V * ).
q p
G, p
q p q . , p x w z q x yz
w y G, p q .
q p n
G, n 1 , p q
p q .
q p , ,
n 0 , p q
p * q .
. ,
, 4
:
: .
L G, :
L w | w T *; S w
G
2 ( )
O :
X q X N q N T
. ,
, 4
:
: .
V
, ,
, :
,
, , .
-, .
.
. ,
, 4
:
: .
PQ
QR
RP
PP
. ,
, 4
:
: .
, =(,,S
={NUMBER,+,-,*,/,(,)}
N={E}
S=E
:
E
E+E
(1)
| E-E
(2)
| E*E
(3)
| E/E
(4)
| (E)
(5)
(6)
. , | NUMBER
, 4
:
: .
(3+7)/(8-6).
(4)
E
:
E
(5):
. ,
, 4
:
: .
(1)
(2).
. ,
, 4
:
: .
V
E
(6).
. ,
, 4
:
: .
V
E
N U M BER
N U M BER
NU M BER
. ,
N U M BER
, 4
10
:
: .
VI
.
,
.
q
,
, ,
. ,
*
p q
lm
,
,
*
p
q
rm
.
,
, 4
11
.
:
: .
VII
LL(k)
,
k
.
LL .
LR(k)
,
k .
LR .
LR(1)
LL.
. ,
, 4
12
:
: .
BNF EBNF I
EBNF N. Wirth
|
( )
[ ]
{ }
=
.
(* *)
,
< >, BNF.
, .. +.
.
.
.
.
::=
.
.
.
. ,
, 4
13
:
: .
BNF EBNF II
:
S = .
= + | - |
.
= * | / |
.
= ( ) | .
= { }.
= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
9.
. ,
, 4
14
:
: .
S = .
= | ( ) |
.
= + | - | * | /.
: (27-5)*8
. ,
, 4
15
:
: .
II
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
*
( ) *
( ) *
( ) *
( - ) *
( - ) *
[ = ]
[ = ]
[ = *]
[ = ( )]
[ = ]
[ = ]
[ = -]
[ = ]
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
()
( )
( )
( - )
( - )
( - ) *
( - ) *
. ,
[ = ]
[ = ( )]
[ = ]
[ = ]
[ = -]
[ = ]
[ = *]
[ = ]
, 4
16
:
: .
II
. ,
, 4
17
:
: .
IV
:
27
. ,
, 4
18
:
: .
,
.
S = .
= | ( ) |
.
= + | - | * | /.
: 27-5*8
. ,
, 4
19
:
: .
(1)
(2)
(3)
(4)
(5)
(6)
(7)
-
-
- *
- *
. ,
[ = ]
[ = ]
[ = ]
[ = -]
[ = ]
[ = *]
[ = ]
, 4
20
:
: .
(1)
(2)
(3)
(4)
(5)
(6)
(7)
-
-
-
- *
- *
. ,
[ = ]
[ = ]
[ = -]
[ = ]
[ = ]
[ = *]
[ = ]
, 4
21
:
: .
.
.
S = .
= _ | .
_ = + | -.
= _ | .
_ = * | /.
= ( ) | .
. ,
, 4
22
:
: .
: 27-58;
(27-5)-8
27-(5-8).
.
. ,
, 4
23
:
: .
V
:
S = .
= _ | .
_ = + | -.
= _ | .
_ = * | /.
= ( ) | .
27-5*8
. ,
, 4
24
:
: .
V
:
27-5-8
. ,
, 4
25
:
: .
VI
ELSE
S = .
= if then
| if then else
| .
. ,
, 4
26
:
: .
if
EK1
th e n
if
if
th e n
EK2
e ls e
ENT1
. ,
ENT2
EK1
th e n
if
e ls e
th e n
EK2
ENT2
ENT1
, 4
27
:
: .
ELSE
S = .
= _ | _.
_=if then _ else
_
| .
_= if then
| if then _ else
_.
. ,
, 4
28
:
: .
. ,
, 4
29
:
: .
(
) ,
, .
. ,
, 4
30
:
: .
1.
2.
3.
.
,
,
.
2,
, , ,
(
)
,
.
. ,
.
. ,
, 4
31
:
: .
S = k X n | k Y.
X = l | m.
Y = mmn | nnm.
kmmm
()
()
()
. ,
()
()
()
, 4
32
:
: .
, .
. ,
, 4
33
:
: .
,
,
, .
:
,
,
,
,
. ,
, 4
34
:
: .
S = .
= + | - | .
= * | / | .
= ( ) | .
:
_
(:
(();
;
());
:
();
:
;
.
. ,
//__: .
(__):
(_=__)
_;
;
.
, 4
35
:
: .
I
,
.
,
.
:
S = .
= _.
_ = + _ | - _ | .
= _.
_ = * _ | /
_ | .
.
,
, 4
36
= ( ) | .
:
: .
V
,
,
_ _ _ () _ _ . . . .
_ _ _ _ _ . . . .
,
,
o ,
, ( FIRST).
, -,
, ,
( FOLLOW).
. ,
, 4
37
:
: .
V
:
A ,
&
FIRST
G, FIRST()
.
, x FIRST() * x ,
LL(1)
A A
FIRST() FIRST() =
!
. ,
, 4
38
:
: .
V
LL(1)
LL(1)
.
LL(1)
.
.
. ,
, 4
39
:
: .
VI
(. )
int PLUS=1, MINUS=2, ...
int lookahead = getNextToken();
// _
void advance() { lookahead = getNextToken(); }
void match(int token) { if (lookahead == token) advance(); else error(); }
void Term() { Factor(); TermPrime(); }
void S() { Expr(); }
void Expr() { Term(); ExprPrime(); }
void ExprPrime() {
switch(lookahead) {
case PLUS : match(PLUS); Term();
ExprPrime(); break;
case MINUS : match(MINUS); Term();
ExprPrime(); break;
default: return;
}
}
. ,
void TermPrime() {
switch(lookahead) {
case TIMES: match(TIMES); Factor();
TermPrime(); break;
case DIV: match(DIV); Factor();
TermPrime(); break;
default: return;}
}
void Factor() {
switch(lookahead) {
case LPAR : match(LPAR); Expr();
match(RPAR); break;
case NUMBER:
match(NUMBER);
break;
,
4
40
default: error();}
:
: .
VII
(.
)
:
Term(); ExprPrime();
/*
. ,
Expr() {
Expr;
ExprPrime ;
Term ;
ExprPrime Term
Expr;
Expr ;
*/
}
, 4
41
:
: .
I
S
L
E
=
|
|
=
|
=
if E then S else S
begin S L
print E.
end
; S L.
num = num
void L() {
void S() {
switch(lookahead) {
switch(lookahead) {
case END: match(END); break;
case IF: match(IF); E(); match(THEN); S();
case SEMI: match(SEMI); S();
match(ELSE); S(); break;
L(); break;
case BEGIN: matvh(BEGIN); S(); L(); break;
default: error();
case PRINT: match(PRINT); E(); break;
}
default: error();
}
}
}
void E() { match(NUM); match(EQ); match(NUM); }
. ,
, 4
42
:
: .
main: S();
S1: (S, IF) : Sif E then S else S
()
S1: match(IF);
S1: E();
: if 2=2 then print 5=5
E1: (E, NUM): Enum = num
print 1=1 E : match(NUM); match(EQ); match(NUM);
1
E1: return E1 S1
S1: match(THEN);
S1: S();
S2: (S, PRINT): Sprint E
S2: match(PRINT);
S2: E();
E2: (E, NUM): Enum = num
E2: match(NUM); match(EQ); match(NUM);
E2: return E2 S2
S2: return S2 S1
S1: match(ELSE);
S1: S();
S3: (S, PRINT): Sprint E
S3: match(PRINT);
S3: E();
E3: (E, NUM): Enum = num
E3: match(NUM); match(EQ); match(NUM);
E3: return E2 S3
. ,
, 4
else
43
:
: .
X p1 | p2 | ...
,
pi
:
_
p1
FIRST(
):
p1
p2 ):
FIRST(
p2
....
pi
FIRST(
) FOLLOW(X):
pi
;
.
. ,
, 4
44
:
: .
FIRST
FIRST()
FIRST(X) X,
FIRST(X)
X , FIRST(X) {X}
X FIRST(X)
X X Y1Y2 ... Yk ,
FIRST(X) FIRST(Y1)
X X Y1Y2 ... Yk ,
a FIRST(X) a FIRST(Yi)
FIRST(Yj) 1 j i
X X Y1Y2 ... Yk ,
FIRST(X) FIRST(Y ) 1 i
.
,
, 4
45
k
i
:
: .
FIRST
FIRST(X1)
FIRST(Xi) ,
FIRST(Xj) 1 j i
, FIRST(Xi) 1 i n
. ,
, 4
46
:
: .
V
FIRST
S
=
=
_ =
|
|
=
_
|
|
=
|
_
{*}
{/}
_
.
_.
+ _
- _
.
_.
=
* _
/ _
.
( )
.
FIRST
{(, }
{(, }
{ , +, - }
FIRST
{(, }
{}
{+}
/
FIRST
+ _ {+}
- _
{-}
* _
{(, }
{-}
/ _
{ , *, / }
*
/
{*}
{/}
. ,
, 4
47
:
: .
V
FOLLOW MH
A FOLLOW(A)
A
FOLLOW(A) A
FOLLOW(A)
$ FOLLOW(S) ($ , S
)
A B , FOLLOW(B)
FIRST()
A B, FOLLOW(B)
FOLLOW(A)
A B , FIRST()
FOLLOW(B) FOLLOW(A)
. ,
, 4
48
:
: .
V
FOLLOW (
)
FOLLOW() {$, " )"}
FOLLOW(_) FOLLOW()
FOLLOW() FIRST(_) { } FOLLOW() {"" , "" ,$, " )"}
. ,
, 4
49
:
: .
, LL(1),
..:
_ = ; _ |
.
= .
. ,
, 4
50
:
: .
LL(1) I
M [X , ]
X
Y
"k"
(
)
. ,
, 4
51
:
: .
LL(1) II
A ,
:
a FIRST(), A
M[A, a]
FIRST(), A
M[A, b] b FOLLOW(A)
A M[A, $] $
FOLLOW(A)
M
.
. ,
, 4
52
:
: .
LL(1) II
( )
S
=
=
_ =
|
|
=
_
|
|
=
|
M
.
_.
+ _
- _
.
_.
=
* _
/ _
.
( )
.
-
(
_
+ _ - _
) $
. ,
*
_
/
_
( )
, 4
53
:
: .
LL(1) IV
( - )
LL(1) 275*8
$
$ _
$ _ _.
$ _ _.
$ _ _.
$ _
$ _ -
$ _
$ _ _.
$ _ _.
$ _ _.
$ _ _. *
$ _ _.
$ _ _.
$ _ _.
$ _
$
. ,
.
27-5*8$
27-5*8$
27-5*8$
27-5*8$
-5*8$
-5*8$
-5*8$
5*8$
5*8$
5*8$
*8$
*8$
8$
8$
$
$
$
= _.
= _.
= .
_. = .
_ = - _.
= _.
= .
_. = * _.
= .
_. = .
_. = .
, 4
54
:
: .
LL(1) V
LL(1)
push($);
// $
push(S);
// S
lookahead = get_next_token(); //
repeat
X = top_of_stack();
if (X X = = $) then
if (X = = lookahead) then
pop(X);
lookahead = get_next_token();
else error();
else
// X
if ( M[X, lookahead] = = X Y1 Y2 ... Yk) then
pop(X);
push(Yk); push(Yk-1); ... push(Y1);
else error();
until (X = $)
. ,
, 4
55
:
: .
. :
= _ | .
X Yp2 | ......
. :
Y Xp1 | ......
X Xp1 |
Xp2 | ... | X
p n | q1 | q2 | .
... | qm:
m X '.
X ' p1 X ' | p2 X ' | ... | pn X ' | .
. ,
, 4
56
:
: .
S = .
= + | - | .
= * | / |
.
= ( ) | .
S = .
= _.
_ = + _ | - _ | .
= _.
_ = * _ | /
_ | .
= ( ) | .
. ,
, 4
57
:
: .
: G -
:
:
X 1 , X 2 ,..., X n ,
.
(i:=1 n)
(j:=1 i-1)
X i X j q
Xi
. ,
, 4
58
:
: .
. ,
, 4
59
:
: .
,
.
_ = ; _ |
.
= .
_if = if then
| if then else
.
. ,
, 4
60
:
: .
X ' p1 | p 2 .
: G
: LL(1)
:
( X)
p
X
( p )
X p1 | p 2 | ... | p n .
p1 , p 2 ,..., p k p,
X pX '| p k 1 | ... | p n .
X ' q1 | ... | q k .
. ,
, 4
61
:
: .
,
, .
.
,
.
( ),
.
. ,
, 4
62
:
: .
.
,
,
.
X p1 p2 ... pn
,
n
,
.
. ,
, 4
63
:
: .
S = .
= + | .
27+5
$
$
$
$ +
$ +
27+5$
+5$
+5$
5$
$
$
$S
$
$
= .
= +
.
S = .
:
(1) S
:
[ = + ]
(2)
[ = ]
(3)
rm
rm
rm
. ,
, 4
64
:
: .
()
()
()
()
()
. ,
, 4
65
:
: .
,
,
(.
).
,
+ :
.
- 1
- 2
+.
.
+ :
- 3
- 4 +
- 5 +
+ .
. ,
, 4
66
:
: .
-
-
- LR ( )
LR (.
).
LR, ,
. :
(
else).
.
. ,
, 4
67
:
: .
LR I
LR
, LL(1).
:
,
.
,
.
LR
.
. ,
, 4
68
:
: .
LR I
,
.
.
,
,
.
LR
.
. ,
, 4
69
:
: .
LR I
,
, (
).
,
, n
,
.
n .
,
,
.
.
. ,
, 4
70
:
: .
LR IV
LR(1)
0
1
2
3
4
( = )
( = )
( = + ) ( = + )
LR(1)
0
1
2
3
4
. ,
+
3
, 4
71
:
: .
LR V
(1 )
(0 )
()
()
()
(1 )
(1 )
(3 )
+
(4 )
(1 )
(0 )
()
(0 )
(3 )
+
(0 )
(0 )
(2 )
(1 )
(0 )
()
()
27+5 LR(1)
. ,
, 4
72
:
: .
LR VI
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
= + .
= - .
= .
= * .
= / .
= .
= ( ).
= .
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(3) (3)
(3) (3)
(6) (6)
. ,
(8) (8)
(1)
(2)
(4)
(5)
(7)
(1)
(2)
(1)
(2)
(4)
(5)
(7)
(1)
(2)
(4)
(5)
(7)
, 4
73
:
: .
LR VI
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+
5
6
- * / ( )
4
1
2
7
8 9
5
5
5
5
4
4
4
4
. ,
10
11
12
3
3
13
14
15
8
8
9
9
, 4
74
:
: .
LR VI
LR(1) (275)*8
$0
$0 (4
$0 (4 5
$0 (4 3
$0 (4 2
$0 (4 10
$0 (4 10 -7
$0 (4 10 -7 5
$0(4 10 -7 3
$0 (4 10 -7 12
$0 (4 10
$0 (4 10 )15
$0 3
$0 2
$0 2 *8
$0 2 *8 5
$0 2 *8 13
$0 2
$0 1
. ,
(27-5)*8$
27-5)*8$
-5)*8$
-5)*8$
-5)*8$
-5)*8$
5)*8$
)*8$
)*8$
)*8$
)*8$
*8$
*8$
*8$
8$
$
$
$
$
(8)
(6)
(3)
(8)
(6)
(2)
(7)
(6)
(8)
(4)
(3)
, 4
75
:
: .
LR
:
S
:
[ = ]
[ = * ]
[ = ]
[ = ]
[ = ( )]
( ) *
[ = - ]
( - ) *
[ = ]
( - ) *
[ = ]
( - ) *
[ = ]
( - ) *
[ = ]
( - ) *
[ = ]
rm
rm
rm
rm
rm
rm
rm
rm
rm
rm
rm
( - ) *
rm
. ,
, 4
76
:
: .
LR
L R
9
Y
4
(
)
. ,
, 4
77
:
: .
LR I
push($);
// $
push(s0);
// s0
lookahead = get_next_token();
repeat forever
s = top_of_stack();
// ACTION
if ( ACTION[s,lookahead] = = ) then
pop 2*|| ;
// &
s = top_of_stack();
push();
push(GOTO[s,]);
// GOTO
else if ( ACTION[s,lookahead] = = si ) then
push(lookahead);
push(si);
lookahead = get_next_token();
else if ( ACTION[s,lookahead] = = and lookahead = = $ )
then return ( );
else error();
,
, 4
78
:
: .
LR I
LR(k) ,
S 0 1 2 n-1 n
:
1.
i ,
2.
i
, k
i .
. ,
, 4
79
:
: .
LR V
LR(?)
GOTO[ ,
]
. ,
, 4
80
:
: .
LR V
& ;
(yacc)
&
. ,
, 4
81
:
: .
LR V
& (
yacc);
&
LR(?)
LR(?)
byacc
. ,
, 4
82
:
: .
LR V
( yacc);
LR(k)
goto( s, )
closure( s ), (. )
&
. ,
, 4
83
:
: .
LR -
V
LR(k) [A , B],
A
B k
( $)
:
[ , a]
[ , a]
[ , a]
[ , a]
LR(0) [ ] (
)
LR(1) [ , a ] ( )
LR(2) [ , a b ] ( ) ...
. ,
, 4
84
:
: .
LR(1) I
, a, 4 LR(1)
[ , a], [ , a], [ , a], & [ , a]
LR(1) .
;
.. [ , a],
[ , a], a
{ [ , a],[ , b] }
= a
FIRST()
LR(1)
. ,
, 4
85
:
: .
LR(1) II
, I0 , I1 , ... , In
a. S
S S
b. , I0
[S S, $]
closure( I0 )
c. Ik , goto(Ik , )
goto(Ik , )
goto( )
. ,
, 4
86
:
: .
LR(1) II
closure(I)
closure(I) I
I
[ , a] [
, x]
x FIRST(a)
Closure(
I )
while ( I )
for [ , a] I
for P
for b FIRST(a)
if [ , b] I
then [ , b] I
. ,
, 4
87
:
: .
LR(1) IV
goto(I,x)
I
x
goto( { [ , a] }, )
[ , a]
closure( [ , a] )
Goto( I, x )
new =
for [ x , a] I
new = new [ x , a]
return closure(new)
. ,
, 4
88
:
: .
LR(1) V
I0 = closure( [S S , $] )
I0 = closure( [S S , $] )
C = { I0 }
while ( C )
for Ii C x ( TNT )
Inew = goto(Ii , x)
if Inew C then
C = C Inew
Ii Inew x
. ,
, 4
89
:
: .
LR(1) V
LR(1)
Closure( I )
while ( I )
for [ , a] I
for P
for b FIRST(a)
if [ , b] I
then [ , b] I
Goto( I, x )
new =
for [ x , a] I
new = new [ x , a]
return closure(new)
I0 = closure( [S S , $] )
C = { I0 }
while ( C )
for Ii C x ( TNT )
Inew = goto(Ii , x)
if Inew C then
C = C Inew
,
, 4
I I x
90
:
: .
LR(1)
S
*
id
*
id
. ,
, 4
FIRST
{ id }
{ id}
{ id }
{ id}
{-}
{*}
{ id}
91
:
: .
LR(1)
I1= {[S , \0]}
id
I2 = { [ - , \0],
[ , \0] }
I4 = { [ id , {\0,-,*}] }
id
I3 = {[ * , {\0,-}],
[ , {\0,-}]}
*
id
I8 = { [ * , {\0,-}] }
. ,
I = { [ - , \0] }
,
4
92
7
:
: .
LR(1)
for Ix C
for Ix
if [ a,b] a T
goto(Ix,a) = Ik ,
then ACTION[x,a] k
else if [SS ,$]
then ACTION[x ,$]
else if [ ,a]
then ACTION[x,a]
for n NT
if goto(Ix ,n) == Ik
then GOTO[x,n] k
. ,
, 4
93
:
: .
LR(1) V
id
0 4
1
2
5
3
5
4
6
5 4
6 4
7
8
4
1
2
3
3
6 5
6 6
7
2
8
3
3
2
4
. ,
, 4
94
:
: .
s [ a , b] [ , a] ;
ACTION[s,a]
,
(.. else)
LR
s [ , a] [ , a] ;
ACTION[s,a]
LR(1)
. ,
, 4
95
:
: .
LR: LR(0)
LR(0):
Closure( I )
while ( I )
for [ ] I
for P
if [ ] I
then [ ] I
LR(0):
I0 = closure( [S S ] )
C = { I0 }
while ( C )
for Ii C x ( TNT )
Inew = goto(Ii , x)
if Inew C then
C = C Inew
Ii Inew
x
. ,
LR(0):
Goto( I, x )
new =
for [ x ] I
new = new [ x ]
return closure(new)
LR(1)
LR(0)
LR(0)
LR(1)
, 4
96
:
: .
LR:
SLR(1)
SLR(1)
FOLLOW
SLR(1)
LR(1)
for Ix C
for Ix
if [ a] a T goto(Ix,a) =
Ik ,
then ACTION[x,a] k
else if [SS ]
then ACTION[x ,\0]
else if [ ]
then for a FOLLOW()
then ACTION[x,a]
for each n NT
if goto(Ix ,n) = Ik
. ,
, 4
97
:
: .
LR:
LALR(1)
: LR(1)
LR(0) LR(1) (
)
LR(1) ,
ACTION
GOTO
LALR(1)
1.
2.
LR(1)
LR(0).
.
LR(1)
. ,
, 4
98
:
: .
LR:
LALR(1)
LALR(1) G
SLR(1)
LR(1) G
- ,
LALR(1)
LALR(1)
-
LR(1)
LALR(1) SLR(1)
. ,
, 4
99
:
: .
LR(k) LR(1)
(LR(k))
LL(k)
LL(1)
. ,
, 4
100
:
: .
LR(k)
LR(1)
LL(k)
LALR(1)
SLR(1)
LL(1)
LR(0)
. ,
LL(1)
SLR(1)
, 4
101
:
: .
.
.
.
.
. ,
, 4
102
:
: .
.
,
.
.
FOLLOW.
LL(1) ,
X,
FIRST(X)
, FOLLOW(X).
. ,
, 4
103
:
: .
LL(1)
I
,
, .
:
(pop),
,
,
(scan)
.
. ,
, 4
104
:
: .
LL(1)
II
pop , $
FOLLOW(X).
scan ,
$
.
FIRST
( X ) FOLLOW
(X )
push ,
,
.
,
, FIRST
.
. ,
, 4
105
:
: .
LL(1)
III
(
)
S
=
=
_ =
|
|
=
_
|
|
=
|
.
_.
+ _
- _
.
_.
=
* _
/ _
.
( )
.
. ,
, 4
106
:
: .
LL(1)
IV
:
M
(
_
) $
+ _ - _
*
_
/
_
( )
_
scan
_
scan
+
scan
-
scan
*
scan
/
scan
+ _ - _ scan
pop
pop
scan
scan
scan
pop
pop
. ,
(
_
) $
pop pop
scan
_
* / scan
_
_
pop
pop
( )
, 4
pop pop
pop pop
107
:
: .
LL(1)
V
LL(1) (27*)
/
$
(27-*)$
$ _
(27-*)$ = _.
$ _ _.
(27-*)$ = _.
$ _ _. ) (
(27-*)$ = ( ).
$ _ _. )
27-*)$
$ _ _. ) _
27-*)$ = _.
$ _ _. ) _ _.
27-*)$ = _.
$ _ _. ) _ _.
27-*)$ = .
$ _ _. ) _ _.
-*)$
$ _ _. ) _
-*)$ _. = .
$ _ _. ) _ -
-*)$ _ = - _.
$ _ _. ) _
*)$
$ _ _. ) _
)$ scan
$ _ _. ) _
)$ pop
$ _ _. )
)$ _. = .
$ _ _.
$
$ _
$ _. = .
$
$ _. = .
. ,
, 4
108
:
: .
LR I
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
= + .
= - .
= .
= * .
= / .
= .
= ( ).
= .
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(3) (3)
(3) (3)
(6) (6)
. ,
(8) (8)
(1)
(2)
(4)
(5)
(7)
(1)
(2)
(1)
(2)
(4)
(5)
(7)
(1)
(2)
(4)
(5)
(7)
, 4
109
:
: .
LR II
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+
5
6
- * / ( )
4
1
2
7
8 9
5
5
5
5
4
4
4
4
. ,
10
11
12
3
3
13
14
15
8
8
9
9
, 4
110
:
: .
LR III
(275*8
$0
$0 (4
(27-5*8$
27-5*8$
$0 (4 5
-5*8$ (8)
$0 (4 3
-5*8$ (6)
$0 (4 2
-5*8$ (3)
$0 (4 10
-5*8$
$0 (4 10 -7
5*8$
$0 (4 10 -7 5
*8$ (8)
$0 (4 10 -7 3
*8$ (6)
$0 (4 10 -7 12
*8$
$0 (4 10 -7 12 *8
8$
$0 (4 10 -7 12 *8 5
$ (8)
$0 (4 10 -7 12 *8 13
$ (4)
$0 (4 10 -7 12
$ (2)
$0 (4 10
$
(Missing parenthesis)
. ,
, 4
111
:
: .
LR IV
,
, .
.
27*8
$0
27-*8$
$0 5
-*8$ (8)
$0 3
-*8$ (6)
$0 2
-*8$ (3)
$0 1
-*8$
$0 1 -7
. ,
*8$
(Missing operand)
, 4
112
:
: .
LR V
,
,
.
.
.
. ,
, 4
113
:
: .
LR V
,
.
,
,
.
.
:
. ,
, 4
114
:
: .
LR V
byacc:
, :
: error _
error byacc.
( )
byacc ,
,
,
error.
error,
.
,
.
, ,
.
. ,
, 4
115
:
: .
LR
V
:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
= + .
= - .
= .
= * .
= / .
= .
= ( ).
= .
byacc :
paragontas : ARITHMOS
{$$=$1;}
| ( ekfrasi ) {$$=$2;}
|
error
{$$=0;}
;
. ,
, 4
116
:
: .
LR IX
: ()
27*8
$0
27-*8$
$0 2
-*8$ (8)
$0 6
-*8$ (6)
$0 5
-*8$ (3)
$0 4
-*8$
$0 4 -9
*8$ -
(syntax error)
$0 4 -9 error1
*8$ (9)
$0 4 -9 6
*8$ (6)
$0 4 -9 14
*8$
$0 4 -9 14 *10
8$
$0 4 -9 14 *10 2
$ (8)
$0 4 -9 14 *10 15
$ (4)
$0 4 -9 14
$ (2)
$0 4
: LALR(1)
byacc
. ,
, 4
117
:
: .
LR X
(
error)
.
()
.
.
macro yyerrok,
.
. ,
, 4
118
:
: .
LR X
paragontas
: ARITHMOS
{$$=$1;}
| ( ekfrasi ){$$=$2;}
|
error
{
yyerrok;
$$=0;
}
;
27 8
syntax error
. ,
, 4
119
:
: .
LR X
yyerrok :
while_statement
: ,
.
macro yyclearin
. ,
, 4
120
:
: .
LR XI
.
;
byacc ,
,
( ).
,
( )
.
. ,
, 4
121