编译原理实验二;语法分析.doc
《编译原理实验二;语法分析.doc》由会员分享,可在线阅读,更多相关《编译原理实验二;语法分析.doc(18页珍藏版)》请在冰豆网上搜索。
福州大学数学与计算机科学(软件)学院
编译原理
——语法分析器
成员:
杨霞030802107
王日日030802139
方艳丽030802102
实验二:
语法分析实验
一、实验目的
根据给出的文法编制LR
(1)分析程序,以便对任意输入的符号串进行分析。
本次实验的目的主要是加深对LR
(1)分析法的理解。
二、实验内容
对已给语言文法,构造LR
(1)分析表,编制语法分析程序,要求将错误信息输出到语法错误文件中,并输出分析句子的过程(显示栈的内容)
LR
(1)分析法的功能是利用LR
(1)分析表,对输入符号串自下而上的分析过程。
LR
(1)分析表的构造及分析过程。
三.实验文法
:
:
=
:
:
=
:
:
=const;|ε
:
:
==
|,=
:
:
=var;|ε
:
:
=|,
:
:
=procedure;;|ε
:
:
=:
=
|call|beginend
|ifthen|whiledo|ε
:
:
=|;
:
:
=odd|
:
:
==|<>|<|>|<=|>=
:
:
=|
|
:
:
=+|-
:
:
=|
:
:
=*|/
:
:
=||()
18
文法缩略版:
P->S
S->BD
B->varH;
H->id|H,id
D->i=E|call(k)|if(k)DelseD|while(K)doD
K->ERE
R-><|>|>=|<=|<>|==
E->EOT|T
T->TQF|F
O->+|-
Q->*|/
F->id|nunber|(E)
:
:
=P
:
:
=S
:
:
=B
:
:
=H
:
:
=D
:
:
=K
:
:
=E
:
:
=T
:
:
=F
实验环境:
windowsmicrosoftvisualc++
实验原理:
构造项集
Setofltemsclosure(I)
{
repeatforeachA®a.Bb,ainJandeachprodutcion
B®gofGsuchthatB®.g,eachoffirst(ba)isnotinJ:
ADDB®.g,btoI
until…nomoreitemscanbeaddedtoI
returnI
}
Setofltemsgoto(I,X):
{
IfIisasetofLR
(1)itemsandXisagrammarsymbol(terminalornon-terminal),thengoto(I,X)isdefinedasfollows:
IfA.X,ainI
theneveryiteminclosure({AX.,a})willbeingoto(I,X).
}
Voiditems()
{
Cis{closure({S’®.S,$})}
repeatthefollowingsuntilnomoresetofLR
(1)itemscanbeaddedtoC.
foreachIinCandeachgrammarsymbolX
ifgoto(I,X)isnotemptyandnotinC
addgoto(I,X)toC
简略分析表:
0
1
2
3
4
5
6
7
8
9
10
11
12
20
21
22
23
24
25
id
num
call
if
else
while
do
*
>
(
)
@
D
H
K
E
T
F
0
r4
1
acc
2
S5
S6
S7
S8
4
…
11
S20
S21
S22
17
18
19
12
S23
13
S20
S21
S22
30
34
18
19
14
S20
S21
S22
25
34
18
19
15
S16
16
17
r7
r7
18
r12
S39
r12
r12
r12
19
r15
r15
r15
r15
r15
20
r16
r16
r16
r16
r16
21
r17
r17
r17
r17
r17
…
..
..
..
..
..
..
..
..
..
.
.
38
r13
S39
r13
r13
r13
39
S20
S21
S22
42
40
S41
41
r18
r18
r18
r18
r18
42
r14
r14
r14
r14
r14
31
43
S5
S6
S8
实验流程图:
实验结果:
输入:
输出:
输入的字符串以结束@
bi,i,i;f(i>i)i=n*n+new(i>n)di=i+i@
栈符号输入动作
0bi,i,i;f(i>i)i=n*n+new(i>n)di=i+i@移入
03bi,i,i;f(i>i)i=n*n+new(i>n)di=i+i@移入
0310bi,i,i;f(i>i)i=n*n+new(i>n)di=i+i@根据H->i规约
039bH,i,i;f(i>i)i=n*n+new(i>n)di=i+i@移入
03915bH,i,i;f(i>i)i=n*n+new(i>n)di=i+i@移入
0391516bH,i,i;f(i>i)i=n*n+new(i>n)di=i+i@根据H->H,i规约
039bH,i;f(i>i)i=n*n+new(i>n)di=i+i@移入
03915bH,i;f(i>i)i=n*n+new(i>n)di=i+i@移入
0391516bH,i;f(i>i)i=n*n+new(i>n)di=i+i@根据H->H,i规约
039bH;f(i>i)i=n*n+new(i>n)di=i+i@移入
0392