简易地递归词法分析报告器

上传人:沈*** 文档编号:86850091 上传时间:2022-05-08 格式:DOC 页数:13 大小:433KB
返回 下载 相关 举报
简易地递归词法分析报告器_第1页
第1页 / 共13页
简易地递归词法分析报告器_第2页
第2页 / 共13页
简易地递归词法分析报告器_第3页
第3页 / 共13页
点击查看更多>>
资源描述
编译原理实验报告实验名称: 递归下降语法分析器实验类型:验证型指导教师:专业班级:姓 名:学 号:电子邮件:实验地点:实验成绩:日期:2012年5月20日一、实验目的通过设计、编制、调试一个递归下降语法分析程序,实现对语法分析器所提供的单词序列进行语法检查和结构分析, 掌握常用的语法分析方法。 通过本实验:1、掌握从源程 序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。2、掌握此法分析器的实现方法。3、上机调试编出的语法程序。二、实验过程这次实验我是通过 VB来写的。通过图形界面更为具体的现实每一步实现的步骤。主要用到listbox 控件来表示每一步骤的实现。1、流程图:2、语法分析树:3、主要程序的分析:1、把每个过程分别用 5个模块表示。分别是模块E (变量i ,布尔值B1)、模块T (变量j,布尔值B2)、模块E1 (变量I,布尔值B3,flag1 )、模块T1(变量0,布尔值 B4, falg2)、模块F (变量k、布尔值B5、flag3 )。利用每个布尔值的真假来控制 listbox 中的进程显示。若该模块中的布尔值为真则可以做相应的移动。若为假则不能。而利用标志位flag来设置检测到的“(、)、+、*”如果接受字符串中有“(”则置flag3为真。即预示着在后面的字符串中要有“)”否则出现错误。其它类似。2、流程分析:i等于3的情况下执行T过程:E-T-ij等于3的情况下执行F过程:E-T-F-(E)j等于4的情况下执行T1过程:E-T-T1-?E-T-T1-*FTi等于4的情况下执行E1过程:E - E1 -?E - E1-+TE13、具体流程分析:A、输入一个字符串,提取字符串的每一个字符。读入第一个字符,如是E-T-F-i则结束进行第二个字符的判断。若是E- T-F-(则将flag3设置为1。并且进行下一个字符的判断直接是接在E的过程中,如语法树所示。直到遇到“)”将flag3重新设置0B 若为E-T-T1- ?,则结束进行第二个字符的判断。若为E-T-T1-*。则将flag2设置为1.并且下一个字符的判断直接是在F的过程中,如语法树所示。直到将T1的过程执行完,将flag2重新设置为0C 若为E-E1- ?。则直接进行下一个字符的判断。若为E - E1 - +。则下一个字符直接在F中进行,再下一个字符在 E1中进行,并将flagl重新设置为0。.4、差错检测以及重新输入:A若遇到输入的字符不是 “ i,*,#,+,(,)”则输出错误。或者在遇到最后字符 “#”而此时flag1,flag2,fla3 中其中有一个为1时,则输出相应的错误。错误 1,错 误2,错误3。B、重新输入则将所有的参数变为初始值,并将listbox 中的参数归0;5、实验调试与检错 三、实验结果1、输入字符串:当前指针甘忻结果lEOCEDUBE E;tiEID;FBOCEDUEE T; BEdlKF:Tl:ElfD;FBOCEDUKE F;IP SM=- i* THEM ADVAJJCEELSEIT SYM=J C THEN BBGIKADVAHCEE:IF SM=P r THEW ADVAMCEELSE ERKOR ENDEL5E EKKDE:PEOCEBUEE El;IF SYf +J THEK BECTNT;El;ENB;PBaCEDUEE T1IF 気时 * THEF BEGIKALVAMCE.F;Tl: ED;单歩全体2逐个单步分析:3分析结束:4、整体分析:6、重新输入:输入字符甲当前指针分祈站果0#单步全体重新输入FBOCEDUM E.PRKEDUM T;PROCEDURE F;IFTHEff ADVANCET;1LSEE1:TLIFSyMs-1THEHEHD;END:BIGIWAWASZE;E;IF SYB=? Y THEN ABVABCE ELSE ERRORIHBELSE EBI10R.FBOCEDUEE E1;FBOCEDUEE T1:IFTHEMIP gwTKEHBBGIMBEGI1TADVANCE;AWAMCE;T;肥El;TL;m;EHD.四、讨论与分析经过仔细的观察, 所得的实验结果与预想的分析结果是相符一致的。这次实验是用 VB写的,可以具体的检错和表示分析的步骤。程序整体式通过5个模块的布尔值得真假来实行嵌套的。首先是在 E的大框架下分为 T和E1过程。先从T过程开始检索并设置布尔值 例如输入一个错误的句子:“ i * ( #”因为括弧的不完整所以flag3=1后不会重新置0则出现错误即“错误 3”或者输入:“i * # ”则出现“错误 2”。每个flag 标志位对应一 个错误。五、附录:1特殊字符(串)的定义便于后面的比较六、实验者自评这次词法分析器的程序我做的还是比较困难的,用了很长时间才把程序做出来,主要 是在程序的分析问题出错语法倒是没有出错。这说明我对词法分析器的原理还没有做到彻 底的掌握和对 C的操作不熟练。但是经过同学和我自己不断的分析和查资料,最终将程序 做好。并且没有错误。但是我的这个程序并没有那么完善,比如我不能分析/的注释内容反映出来/*/的内容也不能反映出来。这是个缺陷。由于是用的C编写的,我的人机界面做的也不是很好。不过经过这次的实验倒是帮我把C的知识复习了一遍,把以前不熟悉的知识全部都复习了,特别是文件操作和指针字符串。虽然我做的并不完善,但是在今后的 实验中我会注意并逐渐完善。七、具体程序A、 定义3个标志位,5个布尔值和相应的变量Dim FLAG1 As Boolean = False , FLAG2 As Boolean = False , FLAG3 As Boolean = FalseDim B1 As Boolean = True, B2 As Boolean = True, B3 As Boolean = True, B4 As Boolean = True, B5 As Boolean = TrueDim a(10) As StringDim t As CharDim flag As Integer = 0Dim n, z As IntegerDim m As Integer = 1Dim i As Integer = 0, j As Integer = 0, k As Integer = 0, l As Integer = 0, o As Integer=0B、分离输入的字符串为一个一个的字符,便于处理ReDima(Len (TextBoxl.Text)For Men = 1To Len(TextBoxl.Text)a(n) = Mid(TextBox1.Text, n, 1)Next nC错误处理及分析结束If (t i And t + And t * And t ( And t ) And t # ) ThenMsgBox(不正确的字符,MsgBoxStyle.OkOnly)EndEnd IfTextBox2.Text = a(m)If (FLAG3 = True And t =) ) ThenTextBox3.Text = TextBox3.Text +Fm = m + 1FLAG3 =FalseEnd IfIf (FLAG1 = True And t =#) ThenMsgBox( 错误,MsgBoxStyle.OkOnly)EndEnd IfIf (FLAG2 = True And t =#) ThenMsgBox( 错误,MsgBoxStyle.OkOnly)EndEnd IfIf (FLAG3 = True And t =#) ThenMsgBox( 错误,MsgBoxStyle.OkOnly)EndEnd IfIf (t =# ) ThenMsgBox( 分析结束,MsgBoxStyle.OkOnly)EndEnd IfD、具体的程序分析:If (i = 3) ThenB1 =FalseIf (B2 = True) ThenListBox2.SetSelected(j,True)j = j + 1End IfIf (j = 3) ThenB2 =FalseIf (B5 = True) ThenListBox5.SetSelected(k,True)k = k + 1End IfIf (k = 2) Then If (t =i ) ThenTextBox3.Text = TextBox3.Text +Fm = m + 1i = 0j = 0k = 0B1 =TrueB2 =TrueListBox2.SetSelected(3,False)End IfEnd IfIf (k = 4) ThenIf (a(m) =( ) ThenTextBox3.Text = TextBox3.Text +FListBox5.SetSelected(k - 1,True)FLAG3 =TrueEnd IfEnd IfIf (a(m) =( And k = 6) Thenm = m + 1i = 0j = 0k = 0B1 =TrueB2 =TrueEnd IfIf (k = 11) Thenk = 0ListBox5.SetSelected(10,False)B2 =TrueListBox2.SetSelected(3,True)End IfEnd IfIf (j = 4) ThenB2 =FalseIf (B4 = True) ThenListBox4.SetSelected(o,True)o = o + 1End IfIf (o = 2 And t =* ) ThenTextBox3.Text = TextBox3.Text +T1End IfIf (o = 4 And t =* ) Thenm = m + 1FLAG2 =TrueEnd IfIf (o = 5 And (a(m - 1) =* Or a(m - 1) =( ) ThenB4 =FalseIf (B5 = True) ThenListBox5.SetSelected(k,True)k = k + 1End IfIf (k = 2 And t =i ) ThenTextBox3.Text = TextBox3.Text +Fm = m + 1B4 =Truek = 0FLAG2 =FalseEnd IfIf (k = 4 And t =( ) ThenTextBox3.Text = TextBox3.Text +FFLAG3 =TrueFLAG2 =End IfIf (t =m = m + 1False( And k = 6) ThenIf (a(m -1) =( And k = 7)B1 =TrueB2 =TrueB4 =TrueB5 =Truei = 0j = 0o = 0k = 0FLAG3 =TrueEnd IfThenEnd IfIf (k = 11) Thenk = 0ListBox5.SetSelected(10,B4 =TrueListBox4.SetSelected(6,End IfFalse)True)End IfIf (o = 6)Theno = 0B1 =TrueB2 =TrueEnd IfEnd IfIf (j = 5) ThenListBox2.SetSelected(4,False )B1 =TrueListBox1.SetSelected(i,True)j = 0End IfEnd IfIf (i = 4) ThenB1 =FalseIf (B3 = True) ThenListBox3.SetSelected(l,True)l = l + 1If (l = 7) ThenMsgBox(不是正确的语法树,MsgBoxStyle.OkOnly)EndEnd IfEnd IfIf (l = 2 And t =+ ) ThenTextBox3.Text = TextBox3.Text +E1FLAG1 =TrueEnd IfIf (l = 4 And t =+ ) Thenm = m + 1j = 0ListBox2.SetSelected(j,True)End IfIf (l = 5 And a(m - 1) =+) ThenB3 =FalseIf (B2 = True) ThenListBox2.SetSelected(j,True)j = j + 1End IfIf (j = 3) ThenIf (B5 = True) ThenListBox5.SetSelected(k,True)k = k + 1End IfIf (k = 2 And t =i ) ThenTextBox3.Text = TextBox3.Text +Fm = m + 1B2 =TrueB3 =TrueFLAG1 =Falsej = 0k = 0End IfIf (k = 4 And t =( ) ThenTextBox3.Text = TextBox3.Text +FFLAG1 =FalseEnd IfIf (k = 6 And t =( ) Thenm = m + 1End IfIf (k = 7 And a(m - 1) =( ) ThenFLAG3 =TB2 =TrueB3 =TrueB4 =Truej = 0k = 0EndIfEnd IfIf (j = 4)ThenB2 =FalseIf (B4 = True) ThenListBox4.SetSelected(o,True)End IfIf (o = 2 And t =*)ThenTextBox3.Text = TextBox3.Text +T1End IfIf (o = 4And t =*)ThenFLAG2 =TrueEnd IfIf (o = 5And a(m - 1)=* ) ThenIf (B5 = True) ThenTrue)k = k + 1End IfIf (k = 2And t =m = m + 1i = 0j = 0o = 0k = 0B2 =TrueB3 =TrueB4 =TrueFLAG2 =FalseListBox5.SetSelected(k,iEnd IfThenIf (k = 4And t =(ThenTextBox3.Text = TextBox3.Text +FEnd IfIf (k = 6And t =(ThenFLAG3 =TrueEnd IfIf (k = 7 And a(m - 1)=()ThenB2 =TrueB3 =TrueB4 =TrueB5 =Trueo = 0j = 0k = 0FLAG3 =TrueEnd IfIf (k = 11)ThenFalse )ListBox5.SetSelected(k,k = 0B4 =TrueEnd IfEnd IfIf (o = 6) Theno = 0j = 0False )True)ListBox4.SetSelected(o,B3 =TrueListBox3.SetSelected(l,End IfEnd IfEnd IfIf (l = 6 And a(m - 1) =+) ThenB2 =Truel = 0ListBox3.SetSelected(l,True)FLAG1 =TrueEnd IfEnd IfIf (i = 5) ThenEndEnd IfEnd Sub
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!