编译原理 语法分析实验/课程设计(C++实现 附源程序下载)

简介: 编译原理 语法分析实验/课程设计(C++实现 附源程序下载)

@TOC

一、语法分析简介

语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确.源程序的结构由上下文无关文法描述.语法分析程序可以用YACC等工具自动生成。

完成语法分析任务的程序称为语法分析器,或语法分析程序。按照源语言的语法规则,从词法分析的结果中识别出相应的语法范畴,同时进行语法检查。

目前,已存在许多语法分析的方法。但就产生语法树的方向而言,可大致把他们分为自底向上和自顶向下两大类。目前比较流行LL分析法和LR分析法。

二、设计要求

创建一个语法分析程序,它采用LL(1)方法或LR(1)方法。该程序的输入是一个文本文档,包括一组2型文法(上下文无关文法)的产生式和任务1程序输出的符号表。任务2的输出是一个YES或NO,即源代码字符串是否符合本2型文法。

三、开发环境

硬件环境:PC机 windows10 64 位

编程语言:C++

运行环境:codeblocks或vs

四、实现过程

从预先写好的文本文件中读入2型文法,保存在一个char类型的二维数组中,每个文法的长度由length数组记录。

计算first集,具体实现过程为:不停的扫描每个文法,其首个字符是终结符,则加入到对应的非终结符的first集中,如果首个字符是非终结符,则扫描该非终结符的first集,把他们全部加入到当前非终结符的first集中,为空,则扫描下一个字符。直到某一次没有发生任何改动,说明first集计算完成。

然后求LR(1)项目集族,构造LR(1)分析表。

分析过程与书上类似,用一个状态栈,一个符号栈。

五、分析过程框架图

在这里插入图片描述

六、运行结果

语法分析对应的文法,包含了头文件、while语句、定义函数语句,赋值语句,定义变量语句等,可以嵌套配合使用

在这里插入图片描述

求得

在这里插入图片描述

项目集输出(部分):

在这里插入图片描述

分析表(部分):

在这里插入图片描述

分析过程(部分)

在这里插入图片描述

七、资源下载与学习

CSDN:语法分析 编译原理实验/课程设计(C++实现)


相关文章
|
8天前
|
算法 开发工具 计算机视觉
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
16 1
|
8天前
|
存储 人工智能 测试技术
C++课程设计实验杭州电子科技大学ACM题目(下)
C++课程设计实验杭州电子科技大学ACM题目(下)
7 0
|
8天前
|
存储 搜索推荐 C++
C++课程设计实验杭州电子科技大学ACM题目(中)
C++课程设计实验杭州电子科技大学ACM题目(中)
11 1
|
8天前
|
存储 C++
C++课程设计实验杭州电子科技大学ACM题目(上)
C++课程设计实验杭州电子科技大学ACM题目(上)
8 0
|
1月前
|
数据采集 数据安全/隐私保护 C++
通过C++和libcurl下载网易云音乐音频文件的5个简单步骤
本文将介绍如何通过C和libcurl库下载网易云音乐的音频文件。我们将通过5个简单步骤完成这个任务,同时会使用爬虫代理IP技术来绕过这些网络限制,确保下载的顺利进行。为此,我们将参考爬虫代理的域名、端口、用户名和密码进行设置。网易云音乐作为一个不断发展的音乐平台,其丰富的资源和智能化服务将持续吸引大量用户,而掌握如上所述的下载技巧也将助力开发者更好地利用这些资源。
通过C++和libcurl下载网易云音乐音频文件的5个简单步骤
|
1月前
|
C++
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P6】大二C++实验作业-模板(4道代码题)【解析,注释】
|
1月前
|
Serverless C++ 容器
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】
|
1月前
|
C++ 芯片
【期末不挂科-C++考前速过系列P4】大二C++实验作业-继承和派生(3道代码题)【解析,注释】
【期末不挂科-C++考前速过系列P4】大二C++实验作业-继承和派生(3道代码题)【解析,注释】
|
1月前
|
存储 小程序 机器人
西安石油大学C++上机实验汇总
西安石油大学C++上机实验汇总
120 0
|
1天前
|
编译器 C++
【C++初阶】—— 类和对象 (下)
【C++初阶】—— 类和对象 (下)