20170219C++项目班02_02递归下降算法/解析器/Scanner实现
来源:互联网 发布:阿里云时间服务器地址 编辑:程序博客网 时间:2024/05/17 06:01
递归下降算法:
1:表达式->项->因子:
2:我们认为:
表达式 = 项 + 表达式
表达式 = 项 - 表达式
表达式 = 项
项 = 因子 * 项
项 = 因子 / 项
项 = 因子
因子 = 数值
因子 = -因子
因子 = ( 表达式 )
注意:上面的就可以体现出优先级了,当涉及到很多运算符的时候,就可以有很多层,这就是递归下降法的原理。
举例说明:
1:1+5*(2-1)
1:整个为一个表达式
2:项+表达式 1 + 5*(2-1)
3:解析左边:
1:1是一个项
2:1是一个因子
3:1是一个数值
4:解析右边:
1:5*(2-1)表达式是一个项
2:因子*项 5 * (2-1)
3:解析 左边
1:5是一个数值
4:解析右边:
1:(2-1)是一个项
2:(2-1)是一个因子
3:2-1是一个表达式
4:项-表达式 2 - 1
5:最终2和1都是数值。
得出:1+*、*=5*-、-=2-1。
解析器:
1:扫描类:得到的是一串字符串:
1:要有保存整个表达式的地方(待解析的)。
2:当前的状态,枚举,Token
3:要有当前位置的信息,pos_
4:number_是多少。
Scanner实现:
1:strtod函数,从字符串里面取出double型的数据。第二个参数代表读到的结束位置。代码:
case '0':case '1':case'2': case'3':case '4':case '5':case '6':case'7': case'8':case '9':case '.':{//下面的char *pTemp = nullptr初始化,在switch里面加了default之后,case里面就无法进行新变量名的绑定,加上一个作用域就可以了。token_ = TOKEN_NUMBER;char *pTemp = nullptr;number_ = strtod(&buf_[curPos_], &pTemp);//返回的double数据最后一位的下一位区间。curPos_ = pTemp - &buf_[0];//刚好curPos_的值就是下次需要读的值。}break;
2:每个分支执行后,curPos_都应该++,放到预读的那一位。
1 0
- 20170219C++项目班02_02递归下降算法/解析器/Scanner实现
- java实现递归下降的表达式解析器
- 递归下降方式的运算解析器
- 递归下降的表达式解析器
- 算法复习之递归算法_02
- 黑马程序员_浅谈递归算法_02
- Java实现C语言语义分析(递归下降)
- 两百行写一个递归下降解析器
- 一个递归下降的数字表达式解析器
- 70 行 Python 代码编写一个递归下降解析器
- 递归下降的带变量的表达式解析器
- C语言实现递归算法
- 算法_02
- 梯度下降算法实现
- 使用递归下降算法分析数学表达式 -- 基于堆栈的计算器实现算法
- 小试牛刀-递归下降算法(1)
- 小试牛刀-递归下降算法(2)
- 小试牛刀-递归下降算法(3)
- 【Spring 核心】装配Bean(一) 自动化装配
- WinForm设置主窗体为固定大小(禁止调整大小)
- Android编译系统产品线(基于友善之臂tin4412 android5.0系统)
- java-异常
- 语句-break语句和continue语句
- 20170219C++项目班02_02递归下降算法/解析器/Scanner实现
- dubbo服务压力测试
- 【C语言简单说】十五:while循环
- 泰勒展开的推导
- gcc编译命令——给初学者
- 团战可以输、提莫必须死 SDUT3526
- Oracle-11g安装与配置
- Java的代码块
- 解析神奇的 Object.defineProperty