总结C 词法分析设计方法
创始人
2024-06-21 19:00:43
0

下面文章从C++词法分析的角度出发,其实语言是一个句子的集合,而句子是由词法分析器返回的记号组成的非线性结构,C++语法分析的任务是在词法分析基础上,根据语言的语法规则,把词法符号分解成各类语法单位。

反映句子结构的***方法是树,常用的有分析树和语法树。分析语法结构的基本方法有两种:自上而下分析方法和自下而上分析方法。自上而下分析从根到叶子建立分析树,而自下而上分析恰好相反。在这两种情况下,分析器都是从左到右地扫描输入,每次读进一个记号。与C++词法分析类似,语法分析也具有双重含义:

①规定句子形成的规则,也被称为语法规则。程序设计语言的大部分语法规则可以用上下文无关文法(ContextFreeGrammar,简称CFG)来描述。

②根据语法规则识别记号流中的评议结构,也被称为语法分析。最有效的自上而下和自下而上的分析方法都只能处理上下文无关文法的子类,如LL文法和LR方法,但是它们已足以应付程序设计评议的绝大多数语法现象。

一、任务与目的

1、使用C/C++程序设计语言和递归下降子程序的方法编写该函数绘图语言的C++词法分析器。并要求设计一个语法分析器的测试小程序来调用自己编写的语法分析器测试各种不同的输入。

2、语法分析的任务是在C++词法分析基础上,根据语言的语法规则,把词法符号分解成各类语法单位。语法分析所依据的是语言的语法规则,语法规则通常用上下文无关文法描述。#t#

通过自己动手编写语法分析器,掌握正规式与正规文法、上下文无关文法(CFG)、有推导的基本概念(推导、分析树与语法树、二义性及二义性的消除)、自上而下分析(递归下降子程序方法、预测分析表方法、LL(1)文法)、自下而上分析。理解如何理论联系实际以及明白理论与实际的差别。

二、分析与设计

语法分析程序一般具有如下功能:对单词符号串进行语法分析(根据语义规则进行推导和规约),识别出程序中的各类语法单位,最终判断输入串是否构成语法上正确的“程序”。

这里我们采用递归下降分析方法:直接以程序的方式模拟产生式产生语言的过程。它的基本设计思想是:为每一个非终结符构造一个子程序,每一个子程序的过程体中按该产生式的候选项分情况展开,遇到终结符直接匹配,而遇到非终结符就调用相应非终结符的子程序。

该分析从调用文法开始符号的子程序开始,直到所有非终结符都展开为终结符并得到匹配为止。若分析过程中达到这一步则表明分析成功,否则表明输入中有语法错误。递归下降分析对文法的限制是不能有公共左因子和左递归。由于文法是递归定义的,因此子程序也是递归的。

对于规模比较小的语言,递归下降子程序方法是很有效的方法,它简单灵活,容易构造,其缺点是程序与文法直接相关,对文法的任何改变均需对程序进行相应的修改。

这里给出C++词法分析程序大概的设计方法:

1、根据要求写出语法分析的上下文无关文法G;

2、消除上下文无关文法G的二义性;

3、消除上下文无关文法G的(直接)左递归,并提取左因子;

4、构造文法的状态转换图并且简化;

5、将转换图转化为EBNF表示;

6、从EBNF构造递归下降子程序;

以下是较为详细的设计:

总体结构与模块划分

语法测试模块(parsermain.cpp)

语法分析器模块(parser.h & parser.cpp)

绘图语言解释器入口

递归子程序集

先序遍历并打印表达式的语法树

出错处理模块

 

 

词法分析器模块(scanner.h & scanner.cpp)

 

初使化词法分析

识别出具有独立意义的最小语法单位

辅助性模块

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...