编译原理-递归下降分析法 c程序部分的分析
实验三 语法分析程序实验
专业 商软2班 姓名 黄仲浩 学号 201506110166
一、 实验目的
编制一个部分文法分析程序。
二、 实验内容和要求
输入:源程序字符串
输出:正确或者错误
三、 实验方法、步骤及结果测试
- 源程序名:递归下降分析.c
可执行程序名:递归下降分析.c
- 原理分析及流程图
#include<stdio.h>
#include<string.h>
char Token[];//存储输入的字符
char sym;//记录下一个字符
char s;//输入字符的传递
static int p= ;//下一个字符的下标
void S();
void T();
void U();
void scaner();//下一个字符
void error();//错误结束
//以此文法为基础作此程序
//S->a|^|(T)
//T->SU
//U->,SU|$
int main()
{
int i=-;
printf("Please input :\n");
do
{ scanf("%c",&s);i++;
Token[i]=s; }while(Token[i]!='#');
scaner();
S();
if(sym=='#')
printf("Success!\n");
else
printf("fail!\n");
return ; }
void scaner()
{
sym=Token[p];
p++;
}
void error()
{
printf("error!");
}
void S()
{
if(sym=='a'||sym=='^')//如果是a或者是^
scaner();
else if(sym=='(')
{
scaner();
T();
if(sym==')')
scaner();
else
error();
}
}
void T()
{
S();
U();
}
void U()
{
if(sym==',')
{
scaner();
S();
U();
}
else if(sym!=')')
error();
}
- 主要程序段及其解释:
S().T().U()//只是分析c语言的部分
scaner()//进行下一个字符的记录
error()//结束的标志
- 运行结果及分析

四、 实验总结
此程序只是以部分为主做出来,是为了慢慢地做好全部c语言的分析。我会慢慢以此思考LL(1)文法来进行最终的文法改写分析。
编译原理-递归下降分析法 c程序部分的分析的更多相关文章
- 《编译原理》LR 分析法与构造 LR(1) 分析表的步骤 - 例题解析
<编译原理>LR 分析法与构造 LR(1) 分析表的步骤 - 例题解析 笔记 直接做题是有一些特定步骤,有技巧.但也必须先了解一些基本概念,本篇会通过例题形式解释概念,会容易理解和记忆,以 ...
- 编译原理根据项目集规范族构造LR(0)分析表
转载于https://blog.csdn.net/Johan_Joe_King/article/details/79058597?utm_medium=distribute.pc_relevant.n ...
- 编译原理实验 NFA子集法构造DFA,DFA的识别 c++11实现
实验内容 将非确定性有限状态自动机通过子集法构造确定性有限状态自动机. 实验步骤 1,读入NFA状态.注意最后需要设置终止状态. 2,初始态取空,构造DFA的l0状态,将l0加入未标记状态队列que ...
- 编译原理 LR分析(主要是LR(0)分析)
一.LR分析的基本原理 1.LR分析的基本思想 LR方法的基本思想就是,在规范归约的过程中,一方面要记住已移进和归约出的整个字符串,也就是说要记住历史:一方面能够根据所用的产生式的推测未来可能碰到的输 ...
- 《编译原理》-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法
<编译原理>-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 此编译原理确定某高级程序设计语言编译原理,理论基础,学习笔记 本笔记是对教材< ...
- 《编译原理》-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集
<编译原理>-用例题理解-自底向上的语法分析,FIRSTVT,LASTVT集 上一篇:编译原理-用例题理解-自顶向下语法分析及 FIRST,FOLLOW,SELECT集,LL(1)文法 本 ...
- 产品需求分析神器:KANO模型分析法
前言: 任何一个互联网产品,哪怕是一个简单的页面,也会涉及到很多的需求,产品经理也会经常遇到这样的情况:老板,业务提的各种新需求一下子都扎堆,哪个需求对用户来说最重要,用户对我们的新功能是否满意?开发 ...
- [Vue源码]一起来学Vue模板编译原理(二)-AST生成Render字符串
本文我们一起通过学习Vue模板编译原理(二)-AST生成Render字符串来分析Vue源码.预计接下来会围绕Vue源码来整理一些文章,如下. 一起来学Vue双向绑定原理-数据劫持和发布订阅 一起来学V ...
- 高级设计总监的设计方法论——5W1H需求分析法 KANO模型分析法
本期开始进入设计方法论的学习,大湿自己也是边学边分享,算是巩固一遍吧: 另外这些理论基本都是交叉结合来应用于工作中,我们学习理论但不要拘泥于理论的框架中,掌握后要灵活运用一点- 这些理论一部分来自于我 ...
随机推荐
- Kbengine游戏引擎-【1】kbengine安装
本文主要介绍如何在Linux上安装 官网环境要求:Centos >= 5.x, Debian >= 5.x GCC版本: >= 4.4.x 官网链接 本文的安装环境介绍:Centos ...
- zabbix监控nginx+php-fpm,mysql+主从复制+高可用,tomcat,redis web状态
zabbix监控对象区分 使用SNMP监控交换 使用IPMI监控服务器硬件 使用Agent监控服务器 使用JMX监控JAVA SNMP监控流程 交换机上开启snmp 在zabbix上添加监控(设置SN ...
- ScreenShot 截图工具类
import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Rect; import an ...
- System.arraycopy() 数组复制方法
一.深度复制和浅度复制的区别 Java数组的复制操作可以分为深度复制和浅度复制,简单来说深度复制,可以将对象的值和对象的内容复制;浅复制是指对对象引用的复制. 二.System.arraycop ...
- Vue+element 需要用到拖拽组件 vuedraggable
新需求是要求界面上的14个可以拖拽,点击保存之后保存拖拽之后的顺序. 确定需求之后肯定第一时间是百度,发现有个插件vuedragger拖拽,按照教程就懵懂的开始了. 官方示例:https://davi ...
- SpringBoot简历模板
项目二:智慧学习-乐勤在线学习网(SpringBoot)◎ 开发模式:团队(8人) ◎ 开发周期:4个月◎ 开发环境:JDK1.8.Zookeeper ◎ ...
- springboot整合elasticSearch客户端
一 ES客户端 ES提供多种不同的客户端: 1.TransportClient ES提供的传统客户端,官方计划8.0版本删除此客户端. 2.RestClient RestClient是官方推荐使用的, ...
- Vuecli 3.0 项目自定义添加静态目录,支持在index.html引入
参考链接:https://blog.csdn.net/qq_15253407/article/details/89491255
- Spark2.0学习记录
Hadoop与Spark的关系: ------------------- Spark 与mapReduce的区别: mapReduce和spark的内存结构: ------------------- ...
- 记录解决一个项目中遇到的maven打包问题
拿到同时给的代码,进行打jar包,这个jar包依赖一个第三方的jar包,一开始用IDEA打出来的包,没有把依赖的包打进去,后来查了相关的资料, 发现需要在maven的pom中添加相关的maven插件, ...