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

上传人:李司机 文档编号:1132870 上传时间:2022-06-30 格式:DOC 页数:12 大小:238.08KB
返回 下载 相关 举报
简易地递归词法分析报告器.doc_第1页
第1页 / 共12页
简易地递归词法分析报告器.doc_第2页
第2页 / 共12页
简易地递归词法分析报告器.doc_第3页
第3页 / 共12页
简易地递归词法分析报告器.doc_第4页
第4页 / 共12页
简易地递归词法分析报告器.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《简易地递归词法分析报告器.doc》由会员分享,可在线阅读,更多相关《简易地递归词法分析报告器.doc(12页珍藏版)》请在三一办公上搜索。

1、一、实验目的通过设计、编制、调试一个递归下降语法分析程序,实现对语法分析器所提供的单词序列进展语法检查和结构分析,掌握常用的语法分析方法。通过本实验:1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。2、掌握此法分析器的实现方法。3、上机调试编出的语法程序。二、实验过程这次实验我是通过VB来写的。通过图形界面更为具体的现实每一步实现的步骤。主要用到listbox控件来表示每一步骤的实现。1、流程图:开始按照语法树将字符串中每个字符i进展判断输入字符串是否有错NYi=“#NY完毕输出结果2、语法分析树:ETE1FT1i(E)+TE1*FE13、主要程序的分析:1、 把每个

2、过程分别用5个模块表示。分别是模块E变量i,布尔值B1、模块T变量j,布尔值B2、模块E1变量l,布尔值B3,flag1、模块T1(变量O,布尔值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

3、-T-T1- E-T-T1-*FTi等于4的情况下执行E1过程:E - E1 - E - E1-+TE13、 具体流程分析:A、 输入一个字符串,提取字符串的每一个字符。读入第一个字符,如是ET-F-i如此完毕进展第二个字符的判断。假如是ET-F-(如此将flag3设置为1。并且进展下一个字符的判断直接是接在E的过程中,如语法树所示。直到遇到“)将flag3重新设置0B、 假如为E-T-T1- ,如此完毕进展第二个字符的判断。假如为E-T-T1-*。如此将flag2设置为1.并且下一个字符的判断直接是在F的过程中,如语法树所示。直到将T1的过程执行完,将flag2重新设置为0C、 假如为E-E

4、1- 。如此直接进展下一个字符的判断。假如为E - E1 - +。如此下一个字符直接在F中进展,再下一个字符在E1中进展,并将flag1重新设置为0。.4、 过失检测以与重新输入:A、假如遇到输入的字符不是“i,*,#,+,(,)如此输出错误。或者在遇到最后字符“#而此时flag1,flag2,fla3中其中有一个为1时,如此输出相应的错误。错误1,错误2,错误3。B、重新输入如此将所有的参数变为初始值,并将listbox中的参数归0;5、实验调试与检错三、实验结果1、输入字符串:2逐个单步分析:3分析完毕:4、整体分析:6、重新输入:四、讨论与分析经过仔细的观察,所得的实验结果与预想的分析结

5、果是相符一致的。这次实验是用VB写的,可以具体的检错和表示分析的步骤。程序整体式通过5个模块的布尔值得真假来实行嵌套的。首先是在E 的大框架下分为T和E1过程。先从T过程开始检索并设置布尔值例如输入一个错误的句子:“i * ( # 因为括弧的不完整所以flag3=1 后不会重新置0如此出现错误即“错误3或者输入:“i * #如此出现“错误2。每个flag 标志位对应一个错误。五、附录:1、特殊字符串的定义便于后面的比拟六、实验者自评这次词法分析器的程序我做的还是比拟困难的,用了很长时间才把程序做出来,主要是在程序的分析问题出错语法倒是没有出错。这说明我对词法分析器的原理还没有做到彻底的掌握和对

6、C的操作不熟练。但是经过同学和我自己不断的分析和查资料,最终将程序做好。并且没有错误。但是我的这个程序并没有那么完善,比如我不能分析/的注释内容反映出来/*/的内容也不能反映出来。这是个缺陷。由于是用的C编写的,我的人机界面做的也不是很好。不过经过这次的实验倒是帮我把C的知识复习了一遍,把以前不熟悉的知识全部都复习了,特别是文件操作和指针字符串。虽然我做的并不完善,但是在今后的实验中我会注意并逐渐完善。七、具体程序A、定义3个标志位,5个布尔值和相应的变量Dim FLAG1 AsBoolean = False, FLAG2 AsBoolean = False, FLAG3 AsBoolean

7、= FalseDim B1 AsBoolean = True, B2 AsBoolean = True, B3 AsBoolean = True, B4 AsBoolean = True, B5 AsBoolean = TrueDim a(10) AsStringDim t AsCharDim flag AsInteger = 0Dim n, z AsIntegerDim m AsInteger = 1Dim i AsInteger = 0, j AsInteger = 0, k AsInteger = 0, l AsInteger = 0, o AsInteger = 0B、别离输入的字符串

8、为一个一个的字符,便于处理ReDim a(Len(TextBox1.Text)ForMe.n = 1 To Len(TextBox1.Text) a(n) = Mid(TextBox1.Text, n, 1)Next nC、错误处理与分析完毕If (t iAnd t +And t *And t (And t )And t #) Then MsgBox(不正确的字符, MsgBoxStyle.OkOnly)EndEndIf TextBox2.Text = a(m)If (FLAG3 = TrueAnd t = ) Then TextBox3.Text = TextBox3.Text + F m

9、= m + 1 FLAG3 = FalseEndIfIf (FLAG1 = TrueAnd t = #) Then MsgBox(错误, MsgBoxStyle.OkOnly)EndEndIfIf (FLAG2 = TrueAnd t = #) Then MsgBox(错误, MsgBoxStyle.OkOnly)EndEndIfIf (FLAG3 = TrueAnd t = #) Then MsgBox(错误, MsgBoxStyle.OkOnly)EndEndIfIf (t = #) Then MsgBox(分析完毕, MsgBoxStyle.OkOnly)EndEndIf D、具体的程序

10、分析:If (i = 3) Then B1 = FalseIf (B2 = True) Then ListBox2.SetSelected(j, True) j = j + 1EndIfIf (j = 3) Then B2 = FalseIf (B5 = True) Then ListBox5.SetSelected(k, True) k = k + 1EndIfIf (k = 2) ThenIf (t = i) Then TextBox3.Text = TextBox3.Text + F m = m + 1 i = 0 j = 0 k = 0 B1 = True B2 = True List

11、Box2.SetSelected(3, False) EndIfEndIfIf (k = 4) ThenIf (a(m) = () Then TextBox3.Text = TextBox3.Text + F ListBox5.SetSelected(k - 1, True) FLAG3 = TrueEndIfEndIfIf (a(m) = (And k = 6) Then m = m + 1 i = 0 j = 0 k = 0 B1 = True B2 = TrueEndIfIf (k = 11) Then k = 0 ListBox5.SetSelected(10, False) B2 =

12、 True ListBox2.SetSelected(3, True)EndIfEndIfIf (j = 4) Then B2 = FalseIf (B4 = True) Then ListBox4.SetSelected(o, True) o = o + 1EndIfIf (o = 2 And t = *) Then TextBox3.Text = TextBox3.Text + T1EndIfIf (o = 4 And t = *) Then m = m + 1 FLAG2 = TrueEndIfIf (o = 5 And (a(m - 1) = *Or a(m - 1) = () The

13、n B4 = FalseIf (B5 = True) Then ListBox5.SetSelected(k, True) k = k + 1EndIfIf (k = 2 And t = i) Then TextBox3.Text = TextBox3.Text + F m = m + 1 B4 = True k = 0 FLAG2 = FalseEndIfIf (k = 4 And t = () Then TextBox3.Text = TextBox3.Text + F FLAG3 = True FLAG2 = FalseEndIfIf (t = (And k = 6) Then m =

14、m + 1EndIfIf (a(m - 1) = (And k = 7) Then B1 = True B2 = True B4 = True B5 = True i = 0 j = 0 o = 0 k = 0 FLAG3 = TrueEndIfIf (k = 11) Then k = 0 ListBox5.SetSelected(10, False) B4 = True ListBox4.SetSelected(6, True)EndIfEndIfIf (o = 6) Then o = 0 B1 = True B2 = TrueEndIfEndIfIf (j = 5) Then ListBo

15、x2.SetSelected(4, False) B1 = True ListBox1.SetSelected(i, True) j = 0EndIfEndIfIf (i = 4) Then B1 = FalseIf (B3 = True) Then ListBox3.SetSelected(l, True) l = l + 1If (l = 7) Then MsgBox(不是正确的语法树, MsgBoxStyle.OkOnly)EndEndIfEndIfIf (l = 2 And t = +) Then TextBox3.Text = TextBox3.Text + E1 FLAG1 = T

16、rueEndIfIf (l = 4 And t = +) Then m = m + 1 j = 0 ListBox2.SetSelected(j, True)EndIfIf (l = 5 And a(m - 1) = +) Then B3 = FalseIf (B2 = True) Then ListBox2.SetSelected(j, True) j = j + 1EndIfIf (j = 3) ThenIf (B5 = True) Then ListBox5.SetSelected(k, True) k = k + 1EndIfIf (k = 2 And t = i) Then Text

17、Box3.Text = TextBox3.Text + F m = m + 1 B2 = True B3 = True FLAG1 = False j = 0 k = 0EndIfIf (k = 4 And t = () Then TextBox3.Text = TextBox3.Text + F FLAG1 = FalseEndIfIf (k = 6 And t = () Then m = m + 1EndIfIf (k = 7 And a(m - 1) = () Then FLAG3 = True B2 = True B3 = True B4 = True j = 0 k = 0EndIf

18、EndIfIf (j = 4) Then B2 = FalseIf (B4 = True) Then ListBox4.SetSelected(o, True) o = o + 1EndIfIf (o = 2 And t = *) Then TextBox3.Text = TextBox3.Text + T1EndIfIf (o = 4 And t = *) Then m = m + 1 FLAG2 = TrueEndIfIf (o = 5 And a(m - 1) = *) ThenIf (B5 = True) Then ListBox5.SetSelected(k, True) k = k

19、 + 1EndIfIf (k = 2 And t = i) Then m = m + 1 i = 0 j = 0 o = 0 k = 0 B2 = True B3 = True B4 = True FLAG2 = FalseEndIfIf (k = 4 And t = () Then TextBox3.Text = TextBox3.Text + FEndIfIf (k = 6 And t = () Then m = m + 1 FLAG3 = TrueEndIfIf (k = 7 And a(m - 1) = () Then B2 = True B3 = True B4 = True B5

20、= True o = 0 j = 0 k = 0 FLAG3 = TrueEndIfIf (k = 11) Then ListBox5.SetSelected(k, False) k = 0 B4 = TrueEndIfEndIfIf (o = 6) Then o = 0 j = 0 ListBox4.SetSelected(o, False) B3 = True ListBox3.SetSelected(l, True)EndIfEndIfEndIfIf (l = 6 And a(m - 1) = +) Then B2 = True l = 0 ListBox3.SetSelected(l, True) FLAG1 = TrueEndIfEndIfIf (i = 5) ThenEndEndIfEndSub

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号