C编译器语法分析的设计与实现

来源 :电子科技大学 | 被引量 : 7次 | 上传用户:lishimuyi
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
高级程序设计语言推动了计算机的发展和应用,其中编译器起着举足轻重的作用。编译器是每一个开发人员必须熟悉并应用的首要系统软件。它的设计与实现是个很大的软件工程,其依赖的相关编译原理以及技术也十分复杂;它是计算机科学中理论与实践相结合的完美典范。本文详细设计和实现了C语言编译器的词法分析器和语法分析器,其中语法分析器又分为LR(1)和LL(1)分析法两种语法分析器。在设计与实现C编译器词法分析器中,将C语言文法中的所有终结符号划分为字符串类,数值类和其他符号类,每一类作为独立的模块来设计与实现。在字符串模块中使用了类似有限状态机的方法来解析关键字。词法分析器中字符串存储的实现使用了哈希表和存储区相结合的方式,以单链表形式管理所有的存储区,把字符串存入存储区的地址放入哈希表,并以其哈希值作为索引。设计了词法分析错误处理和缓存区管理。词法分析器将为语法分析器提供扫描符号。首先对语法分析阶段使用的产生式,FIRST和FOLLOW集合进行编码。依据移进-归约的思想,设计了LR(1)语法分析的结构和归约算法。在算法中归约产生式从选候选产生式中匹配筛选,并使用C文法符号的FIRST和FOLLOW集合作为移进和归约的判断条件。然后在这些算法之上创造性的设计了三个数据结构:产生式集合表,符号到产生式集合的映射表和终结符与非终结符表。依靠这些设计实现了LR(1)语法分析器。本文使用递归下降法来实现C编译器的自顶向下语法分析器。从根结点开始,利用FIRST集合选择相应的产生式,FOLLOW集合判断产生式的返回和出错进行语法分析。针对LL(1)语法分析中遇到的产生式左递归,公共左公因子和FIRST集合冲突问题分别以迭代循环右展开,提取公共左公因子先执行和“预扫描-回滚”方法解决。基于以上所有设计与实现,将C语言编译器的词法分析器和语法分析器整合。系统实现了对C89所有文法的语法分析,能够生成源程序的语法树,以及对语法错误的识别和报错。运行结果显示系统所有功能都达到了预期的要求。
其他文献
以我国29个省市为研究对象,利用2004-2017年面板数据主要对城乡收入差距和经济增长之间关系的省际差异进行分析,得出结论:城乡收入差距与经济增长之间是非单项影响关系;并且
以云南省景洪市曼听村为例,分析了傣族地区农村产业结构的调整情况以及农村人均纯收入现状,发现林业收入是曼听村农民收入的最重要组成部分,第二、三产业收入是曼听村农民收
图像的大量生成与传播不可避免地对造型艺术的发展产生影响,但这种影响存在消极和积极两个方面,即所谓“困境”和“出路”两种截然相反的趋向。海德格尔认为,艺术品的评价有
从各方面介绍总图设计的特点。
<正>全面推行河长制湖长制以来,广州市按照国家、省部署要求,扎实开展网格化治水、掌上治水,强化监督问责,有效推进压实河长制"最后一公里",推动河湖长制工作走深走实。2018
在我国并网规程对分布式电源低压穿越功能的要求下,为了实现逆变型分布式电源IIDG(inverter-inter.faced distributed generator)的最优工作效率,提出了基于无功电流支撑的低
研究了垃圾焚烧发电回转窑用磷酸盐结合高铝砖结构特性、热力学特性、化学稳定性及抗机械扭曲变形、热化学浸蚀、热应力冲击等.在窑内高温气流下,垃圾焚烧灰粉与煤灰、物料形
"焦土抗战论"是李宗仁在抗战时期提出的系统抗日救国主张,反映了他在军事理论上所具有的朴素唯物论和辩证法思想。李宗仁的抗日主张是在全面客观地考察了抗战中产生的各种问
综述了有机磷农药的种类和毒性、有机磷农药生物降解技术、有机磷农药降解菌的种类、降解菌的获得、降解机理以及有机磷降解酶的应用6个方面的研究进展,并对有机磷农药生物降
《X战警》科幻依然是成年人最迷人的童话。这部漫画般风格的影片画出了一群天生拥有特异功能的人士,为了保护人类免于邪恶战警的迫害而掀起的正邪大战……
期刊