编译原理语法分析程序设计Word格式.docx
- 文档编号:21483005
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:18
- 大小:291.78KB
编译原理语法分析程序设计Word格式.docx
《编译原理语法分析程序设计Word格式.docx》由会员分享,可在线阅读,更多相关《编译原理语法分析程序设计Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
{
#;
<语句串>
IDifwhile£
}
<语句>
IDifwhile
J
<赋值语句>
ID
<条件语句>
if
<循环语句>
while
<条件>
IDNUM(
)
<表达式>
<
=>
>
===!
=);
<表达式>:
+-£
项>
+-<
=);
项'
*/£
<因子>:
*/
<关系运算符>
===!
5.根据求得的FIRST集和FOLLOW集构造LL
(1)分析表如下:
表格内空白的部分表示“出错”,非空白部分表示要压入分析栈中的文法符号,是按照对
应产生式的逆序存放的,即当查找分析表时,表格内的内容从左至右依次入栈
第3步中改写文法的LL
(1)分析表
main
NUM
(
+
-
*
/
=
==
!
;
<程序>
语句块>
)(main
<语句串>;
<语句>
£
<赋值语
句>
=ID
<条件语
<语句块>)
<条件>(if
<循环语
<语句块>)<条件>(while
<表达式><关系运算符><表达式>
<表达式'
><项>
<表达式'
<项>+
<项>-
<项'
><因子>
>
因子>
<因子>
)<表达式>(
<关系运算
符>
二、所用仪器、材料(设备名称、型号、规格等)
操作系统:
MicrosoftWindows7
开发平台:
MicrosoftVisualStudio2010
三、实验方法、步骤
登录MicrosoftWindows7操作系统
打开VisualStudio2010开发平台
新建“项目”
“Win32控制台应用程序”
输入项目名称
“应用程序设置”
勾选“空项目”复选框
右击左侧“解决方案资源管理器”下的“源文件”
“添加”
“新建项…”
新建一个“C++文件(.cpp)”
在新建的.cpp文件中输入语法分析代码
调试
运行
记录结果
完成实验报告。
四、实验过程原始记录(数据、图表、计算等)
源代码见实验报告所在目录下的yangdongdong_2.cpp以下是部分程序代码的截图:
31nt
^37{
838]
539
315+intlaoJcupTable(intnonTenninaJ-,classNo,FILE^oFiie)
66?
|"
语法分析程序样
+|inrgait瞪丄~~
ir^inG
匚二己rrir亡二;
Y调用语三分产握言:
・
return0;
五、实验结果
测试一:
输入文本1(inputl.cpp):
1
bofilD()
204
3
a=a41;
4
if(a<
3)
sE
3{
G
surt=suit]-Fi;
7
一Is.■
f・
a
3E
Q{
10
3knr-Bun-l;
1L
-、■
亠**
12
3uir=aj'
5UJT-a/3'
Ujr;
13
■-
调用语法分析程序后的运行情况:
输出output1.txt文件:
tD:
)卜
工具⑴帶陆(H)
共品<
制录新建文件夹
燈改日期
,CLltputl.tKt
2010/12/1215:
24
立年文档
吋input2,cpp
21
C++Source
inputl^cpp
08
C*+Source
output1.txt文件中的内容如下:
Ioutputltxt-远事本
文嚨(0鞭旧艳式回壹看巴壽期ttD
nain()<
STMT_BLOCIC>
<
STMT_STREftH>
STMT>
?
STlir_STIREftl1>
ASSH_STHT>
ID=<
EKPRESSIDH>
TERH>
IEKPBE0SIDI1_"
FACT0R?
TERM_1>
-
NULL>
+<
TERNXE?
iFKE:
$$inN1>
HUH
N(JLL>
STMT>
STMr_STIKEftM>
C0ND_STMT>
1F(<
COHDIT1ftN>
)<
STI1T_BL0CK>
{EXPRESSI0NXRELA_OPTXEKPRESSIOH>
TERM>
EXPRE£
lDiri>
FACT0RXTERH_1>
IEXPRESSHON_1>
FfiCTOR>
TEftM1>
HULL>
(<
STI1T_STREftl1>
SIMT>
:
STI1T_STBEftH>
fiSSH_STMT>
1D-<
EXPRESS1OH>
TERN>
IEKPRESSION_1>
FfiCT0RXTERI1_1>
TERt1XEKPRESXI0N_1>
FACT0RXTEKM_1>
SlMT>
STI1T_STlREftl1>
L00P_STMT>
while7<
C0NDITI0N>
STMT_BL(]CK>
文悴(0濡施1艳式d童看也
|LIHE[8]:
LOOPSTMT>
—>
tfhile(<
COHDIfIUN?
)<
SIMl_HLUCK>
—H
LINEL8J:
C0n)lTl0N>
--〉
EXPRESS10HXRELA0PT>
EXPRESS10N>
LIHE[8]:
E3irRESSJ0N>
EKPBESSI0H_1>
—y
FAGT0RXTERI1_1>
LINE[町:
FACTOR>
L1NE[8]:
7ERM_1>
LINE[8]:
EXPRES5I0N_1>
坨MULL〉
RELR_0PT>
EXPRESSION>
TERMXEXPRESS1OH_1>
LINE⑹:
FflCT0RXTERM_1>
LINE[8]:
EXPRESS1ON_1>
L1NE[9]:
STI1T_BLOCK>
srm_siRLftM>
y
LINE[10]
:
STWT_STBEAI1>
—
stnt7;
stht£
TREnn>
LIHE[10]
ASSM_STNT>
F
LINE[1B]
flSSM_STMT>
ID-<
EXPRES£
IOM>
LINETIBl
EXPRESSIOH>
TERMXEXPftE£
SlON_1>
LINE[-10]
FftCTOftXTERri1>
LINE[1O]
FfiCT0P>
ID
TERM1>
HDLL>
LIHET101
EXPRESSI0N_-1>
-<
TERMXEKPRE£
S1ON_1>
LIHEflB]
teSh>
FftCT0ftXTERM_1>
LIHE[18]
z<
FfiCT0R>
HUH
TERH1>
cutputltxt-记事本
r
|outputltxt-记事本
文样is礎⑹植式gj童看M務旬砂
语法扫描咸功完咸•…
丿④
注:
语法分析程序本身只要求输出分析结果,此处暂时将每一步推导所用的产生式输出,方便对照检查,LINE[N]表示第N行,以下测试类似,不再说明。
测试二:
输入文本2(input2.cpp):
1[iAin(3)
20{
if(a<
3)3(
3iirt=3Uir41^
11
while:
3Lanr>
=9J(
5Wi=5'
5^iiir-G'
131-}
调用语法分析程序后的运行情况:
输出output2.txt文件
(D:
丄貝CD
*刻录新童丈件夹
outputs.tirt
2010/12/1216:
35
,OUtpUtl.tKt
也input2xpp
2010/12/1215;
dSource
Output2.txt文件中的内容如下:
]output2.tvt”远事本
IZZ3
文祥(E)漏辑近宿式◎壹看塑帮助(H)
LIHE[1J:
LINE[1]:
LINE[2J:
LINE[3]:
LIHE[3J:
LINE[3]:
LIKE[3J:
LINE[3]=
LINE[3|:
LIHE[3]:
LIHE[3]:
LIHE[9J:
LIHE[9|:
LIHE[3];
LIHE[3]:
LIHE[41:
LlHE[>
il:
LIME[4J;
LIME[4]:
LIHE[4J:
LlNE[iiJ:
LINE[2|J:
naln()<
STI1T_STREAI1>
}<
;
STI1T_STREfil1>
fiSSM_STMT>
id=<
expiressioh>
TERI1>
EXPRESSr(]K_1>
FnCTOR>
WJLL>
+<
EKPRESSION1>
FfiCT0RXTERI11>
HUM—
HIJLL>
;
STIIT_STREflM>
COND_STNT>
jf(<
CCNDITJOH>
STHT_BLiOCK>
EKPRESSJON?
fiElLfi_OPTXEKPRESSrON>
TERn>
EXPRESSI0M_1>
FACTORXTERM
■K
output2.t<
t-iSW本
文禅旧輻辑®
宿式g】壹看⑼帮朋砂
LINE[4):
LINE[H]:
LINE[HJ:
LIHE[4J:
LlHE[i|]:
LINE[t|J:
LIME[U]:
LINE[4]:
L1HE[4J:
LIME[5J:
LINE[6]:
LINE[6J:
L1HE[6J:
LINE[6]:
LINE[6):
LIHE[6):
LIHE[6]=LIHE[6):
LIHE[7]:
-一>
EHPRESSI0N^1>
RELfl_0PT>
KTERMXEaiPRESS10N_1>
FftCT0RXTERN_1>
NUM~
TERN_1>
NULL5
EXPRESSION1>
HUI_L>
「印丽肌可能缺少*
STnr_BLnCK>
5TI1J_STRfRI1>
TNT_STREnn>
STI'
1T>
STI1T_STREfll1>
n^SM_STtn>
1D=<
EJCFRESS1ON>
CEXFRESSIOhl>
EXPRESSION^I>
FftCT0RXTERI1_1>
ID<
TEHN_1>
NIJLL>
EXPRESSIOn2i>
+<
TEnHXEXPRESSION_1>
一<
NUM
T£
RM_1>
EXPRESSlON2l>
--〉<
WLL>
STrn_STREnN>
null>
K~
□utput2.1rt-远事衣
文件旧輻瑁®
梧式◎查春璽帮助(H)
L1HE[7):
LINE]町:
LINE[0]:
LINE[8]:
LIHE[8]:
LINE[SJ:
LINE[8]:
LIHE[6]:
LIHE[Q]=LlHE[ej:
LIHE[8]:
LIbE[O]:
LINE[8J;
LIHE[9J:
STMT_STREAhl>
STMT_STREfihl>
-<
LOOP_STMT>
condItion>
TERhl>
(FACTORS<
TERN15<
EXPRESSIOh3i>
RELfi_OPT>
EKPRESSION_1>
STHI_BLOCK>
S7HT>
STHT_STfiEflH>
LOOP_STriT>
-wriile(<
CDNDITION>
EXPRESS10NXREILA_OPT>
E3CPRESSION>
TERNXIEXP«
ESS1>
FfiCTORXTERI11>
ID_
EXPRESSION_1>
gCTORXTERM」〉
HUM
SULL〉
STMT_STREAI1>
LINE[10]:
LINE[16]:
LIME[10]:
LIHE[19]:
L1HE[10]:
LINE[1O]:
STHTSTRERn>
一一>
STNT>
S7l1T_STREfll1>
SThTT>
KfiSSI1_STIfT>
-<
I»
=<
CKrRESSI(]N>
EXPRESS1ON>
TERIO<
EXPRESSI0N_1>
―〉<
FACTOfi>
FfiCTnR>
w—
|output2.1rt-记事本
I~I
文件(E)锚Q格式◎查看型}帮勛旧)
LIHE[10]:
L1HE[10]:
LINE[10J:
LINE[1O]:
LINE[1O):
LIHE[1O]:
LIHE[11):
LIHE[12]:
LIHE[12):
LINE[12]:
FfiCIOR>
--〉ID
TERM_JI>
HULL?
EXPRESSIOnZi>
ESPRESSION_1>
TERtl>
FfiCI0RXTERI1_1>
FflCTOR>
〉<
EXPRESS]ON2l>
STNTSTREAMS—>
HIILL>
LIHE[12];
ERR0R
LIHE[12]
LINE[12]
LINE[13]
ERROR*
ERRORERROR
ERRORERRORERROR
词[仙]
[21][H][2*][10]
[23][1«
]
【25]
STMT_STREnM>
唔法扫描成功完成….
六、分析和结论
1.本程序先用预先分析法进行语法分析,基本思路是:
(1)首先初始化分析栈和输入单词指示器(即读取当前输入串中的第一个单词);
(2)然后查看当前分析栈的栈顶符号:
①如果是终结符号,则查看是否与当前输入单词匹配,若匹配则将之出栈,输入指示器指向下一个单词,进行下一轮扫描,若不匹配则报错,②如果是非终结符号,则根据当前输入单词查找分析表,若查到,则将当前栈顶符号出栈,并将查到的产生式逆序入栈,进入下一轮扫描,若没有查到,则报错;
(3)最后,若分析栈和输入单词同时为结束符(#)时,表示语法分析成功,程序结束。
2.本程序对语法分析中的错误处理和识别有很多问题,如某些错误可能导致程序进入死循环,因此在语法错误处理方面仍有待改进
3.程序中对文件的操作仍一些不足之处,如:
若关闭输入文件时失败,则会导致输出文件也无法关闭,占用系统资源。
另外,此程序只是对语法分析过程的一个演示,当真正进编译程序的编制时,需要配合专门的语法错误处理程序和中间代码转换程序等进行编译。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 语法分析 程序设计