编译原理 语法分析实验/课程设计(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++实现)


相关文章
|
2月前
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
196 3
|
6月前
|
IDE 编译器 项目管理
Dev-C++保姆级安装教程:Win10/Win11环境配置+避坑指南(附下载验证)
Dev-C++ 是一款专为 Windows 系统设计的轻量级 C/C++ 集成开发环境(IDE),内置 MinGW 编译器与调试器,支持代码高亮、项目管理等功能。4.9.9 版本作为经典稳定版,适合初学者和教学使用。本文详细介绍其安装流程、配置方法、功能验证及常见问题解决,同时提供进阶技巧和扩展学习资源,帮助用户快速上手并高效开发。
|
算法 开发工具 计算机视觉
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
【零代码研发】OpenCV实验大师工作流引擎C++ SDK演示
245 1
|
存储 搜索推荐 C++
C++课程设计实验杭州电子科技大学ACM题目(中)
C++课程设计实验杭州电子科技大学ACM题目(中)
90 1
|
存储 JavaScript 前端开发
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
程序与技术分享:C++程序设计实验考试准备资料(2019级秋学期)
|
存储 编译器 C++
详细解读C++编译原理
详细解读C++编译原理
117 0
|
存储 人工智能 测试技术
C++课程设计实验杭州电子科技大学ACM题目(下)
C++课程设计实验杭州电子科技大学ACM题目(下)
78 0
|
存储 C++
C++课程设计实验杭州电子科技大学ACM题目(上)
C++课程设计实验杭州电子科技大学ACM题目(上)
90 0
|
7月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
3月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
89 0