java实现图形界面输入半径求圆面积_编译原理——语法分析器的设计和实现(包含可视化)...

接下来的几篇文章应该都是与编译原理相关的~感谢大家阅读!代码用的是MFC,框架简单上手快,还是大二数据结构课设的时候助教教的,很实用。笔者水平有限,大家觉得没什么用那就权当开心一下了。O(∩_∩)O哈哈~

PS:代码真的很简单,因为当时老师要求手写这个过程所以就放上来了。有什么不对的地方还请批评指正,谢谢~


一、实验目标

1、了解形式语言与自动机理论在计算机中的应用。

2、了解计算机对语言的处理方式,并能掌握自下而上语法分析的原理。

3、在上述基础上,编写基于算符优先文法的语法分析器。这里我实现了对通用算符优先文法的识别(即大写字母+终结符形式)。

二、总体设计

1. 功能设计及原理说明

1.1 实验原理

(1).编译程序

5c53f26b66673cc301f53fdba8a8ff4a.png

(2)语法分析的用处和要点

语法分析基于词法分析,并对识别出来的单词的形式进行分析。正确的语法分析保证程序能往下执行。算符优先文法的语法分析的要点在于构造非终结符的FirstVT和LastVT以及优先关系表,然后根据优先关系表对产生式进行规约。

1.2 功能模块

(1)预处理模块

该部分主要是从文本文件中读入文法,完成对多余空格和回车的处理,并初始化各表。

7c00511576815e20cf54b160d83ba541.png

(2)求First和follow集合

该部分主要是完成对文法的每个产生式求First和Follow集合,其中我对这部分数据结构进行设计,用简单的递归函数即可实现求解。

b9b578c51abecc067779ca659afb3567.png
1.对每个非终结符,需要先求出first集合——by hallucination

9b6b87e73d7a8d3048b061a0ea826357.png
2.求出first集合后,对每个非终结符求follow 集合——by hallucination

(3)求优先关系表

该部分算法来自课本《编译原理 第三版》(陈火旺著),没有做大的改动。以下内容来自老师的PPT,写的很详细,直接摘过来了,感谢老师!

bdeeafe1be9062ea4472088da2674e85.png
来自老师PPT,感谢老师!

d95f9a78ec261bd8bfc60fce46a442b1.png
来自老师PPT,感谢老师!

(4)算符优先文法的规约

该部分算法来自课本《编译原理 第三版》(陈火旺著)没有做大的改动。

c0d4d133ef826756e824b92e09208021.png
来自老师PPT,感谢老师!

2. 类的设计

#pragma once

三、测试/调试过程

1. 调试环境

Visual Studio 2103professional 的集成开发环境,图形界面主要是利用MFC来完成。

2. 调试过程

由于在MFC里把所有的操作函数和操作对象都定义成了CLAN类,所以只需分别调试每个类函数即可。最后调用Main_Function()函数处理整个流程即可。

3. 使用流程

注:由于编译后的动态链接库太大,我就删除了,只留了代码、可执行文件和测试程序。

(1)双击打开运行程序出现如下界面。

b091c3d289dff2dce4df2f91df8c5d2b.png
识别的是算符优先文法——by hallucination

(2)点击选择文法按钮,选择预处理的文件。(注:此处为.txt类型,可在测试文法文件夹下选取,也可随意添加)。可返回是否算符优先文法。

特别注意:文件中需要识别的输入文法必须以;结束,否则不能正常处理

305cf698eec4c52c9d14e127be5bd54d.png

(3)点击求表格一栏,如果预处理返回该算法是算符优先文法的话可以求出FirstVT/LastVT以及优先关系表。

2e3554266653c1a39a3cc0e44e1fcd3c.png

(4)输入以‘#’结尾的表达式判断是否算符优先文法。

26d3a38afc7a0366c9325f69062673b4.png

不满足的情况。

85e1ae01b273513f50eedef2a8ec65c9.png

四、结论

1、本次语法分析完成了对算符优先文法的判断处理,以及对符号串是否算符优先文法的规约过程。

2、程序的输入为文本文件,可以处理输入多个空格和回车的文法,要求输入文件最后添加;作为文本结束标志

3、输入规约字符串时要求加上#作为结束标志。

3、经测试后本程序在上述条件下正确。

总结:该语法分析器能完成算符优先文法的识别,对于矩阵并没有完全利用所有单元,而是从标号1开始,0作为辅助判断标志位,使得存储结构更合理。

五、参考资料

完成本次实验主要用到的参考资料目录如下所示:

[1]陈火旺﹒《编译原理》(第三版)﹒国防工业出版社

[2]谭浩强.《C++程序设计》(第二版).北京:清华大学出版社,2014-4

[3]严蔚敏,吴伟民.《数据结构》(C语言版).北京:清华大学出版社,2015-5

[4]侯俊杰.《深入浅出MFC》(第二版).武汉.华中科技大学出版社.2002-9

[5]姚领田.《精通MFC程序设计》.北京.人民邮电出版社.2005

You can get all my code on my github.

KristinKong/CompileTheory-SyntaxAnalysis​github.com
e3d47072ae756750b2793de145a00742.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值