javascript中解析四则运算表达式的算法和示例
来源:互联网 发布:第一人称冒险游戏java 编辑:程序博客网 时间:2024/06/05 21:50
这篇文章主要介绍了javascript中解析四则运算表达式的算法和示例,本文介绍了中缀表示法、逆波兰表示法这2种算法,并分别给出了代码实例,需要的朋友可以参考下
在编写代码时我们有时候会碰到需要自己解析四则运算表达式的情况,本文简单的介绍使用JavaScript实现对简单四则运算表达式的解析。
一、熟悉概念
中缀表示法(或中缀记法)是一个通用的算术或www.111ci.com逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4)。也就是我们最常用的算术表达式,中缀表达式对于人类来说比较容易理解,但是不易于计算机解析。
逆波兰表示法(Reverse Polish notation,RPN,或逆波兰记法),是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式方式,在逆波兰记法中,所有操作符置于操作数的后面,因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。逆波兰表示法容易使用堆栈结构对表达式进行解析并计算,所以,这里我们解析四则元素表达式,是先从中缀表达式,转换为逆波兰表达式。然后再计算值。
二、转换流程
中缀表达式转换为后缀表达式(调度场算法)
1.输入队列弹出一个记号
2.如果记号为数字,添加到输出队列中
3.如果是一个操作符(+-*/)则比较它与输出堆栈中栈顶的操作符,如果优先级小于或等于栈顶的操作符,那么将栈顶的操作符弹出并加入输出队列(循环,直到上述条件不满足),最后将本次的操作符压入堆栈。
4.如果是一个左括号,压入堆栈
5.如果是一个右括号,从栈中不断的弹出操作符,并加入输出队列,知道栈顶的元素为左括号。弹出左括号,不加入输出队列。如果没有发现左括号,说明原来的表达式中括号不对称,有错误。
6.如果输入队列为空,而栈中www.111si.com尚有操作符时,如果栈顶的操作符为左括号,则说明原表达式有不匹配的括号。将栈中的操作符逐个弹出,加入输出队列。
在编写代码时我们有时候会碰到需要自己解析四则运算表达式的情况,本文简单的介绍使用JavaScript实现对简单四则运算表达式的解析。
一、熟悉概念
中缀表示法(或中缀记法)是一个通用的算术或www.111ci.com逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 + 4)。也就是我们最常用的算术表达式,中缀表达式对于人类来说比较容易理解,但是不易于计算机解析。
逆波兰表示法(Reverse Polish notation,RPN,或逆波兰记法),是一种是由波兰数学家扬·武卡谢维奇1920年引入的数学表达式方式,在逆波兰记法中,所有操作符置于操作数的后面,因此也被称为后缀表示法。逆波兰记法不需要括号来标识操作符的优先级。逆波兰表示法容易使用堆栈结构对表达式进行解析并计算,所以,这里我们解析四则元素表达式,是先从中缀表达式,转换为逆波兰表达式。然后再计算值。
二、转换流程
中缀表达式转换为后缀表达式(调度场算法)
1.输入队列弹出一个记号
2.如果记号为数字,添加到输出队列中
3.如果是一个操作符(+-*/)则比较它与输出堆栈中栈顶的操作符,如果优先级小于或等于栈顶的操作符,那么将栈顶的操作符弹出并加入输出队列(循环,直到上述条件不满足),最后将本次的操作符压入堆栈。
4.如果是一个左括号,压入堆栈
5.如果是一个右括号,从栈中不断的弹出操作符,并加入输出队列,知道栈顶的元素为左括号。弹出左括号,不加入输出队列。如果没有发现左括号,说明原来的表达式中括号不对称,有错误。
6.如果输入队列为空,而栈中www.111si.com尚有操作符时,如果栈顶的操作符为左括号,则说明原表达式有不匹配的括号。将栈中的操作符逐个弹出,加入输出队列。
0 0
- javascript中解析四则运算表达式的算法和示例
- 字符串四则运算表达式的算法
- 中后缀表达式的相互转换和四则运算表达式求值
- + - * / ( ) 四则运算表达式解析的初步实现
- 四则运算的中缀表达式和后缀表达式
- 四则运算的中缀表达式和后缀表达式
- 四则运算表达式解析
- 解析表达式 四则运算
- Qt解析四则运算表达式
- 表达式(四则运算)计算的算法
- 输入四则运算的表达式,求解结果算法
- 表达式(四则运算)计算的算法
- 计算解析四则运算表达式【带负号和括号】
- 分别用C++和JavaScript 实现四则运算表达式求值
- 四则运算表达式的值
- [数据结构与算法] 5,栈的应用-四则运算表达式求值
- 利用逆波兰表达式(后缀表达式)解析四则运算表达式的详细源代码及解释
- NumPy中ndarray和matrix的四则运算
- js原生的订阅模式
- ios 独立创建一条线程,去做些事情
- [CPP]static思考-4
- 主成分分析与白化预处理
- POJ 1323-Game Prediction(贪心)
- javascript中解析四则运算表达式的算法和示例
- HTML中的超链接
- toad导出表的数据
- 陈老师的多校联合2010811c题||09年武汉站||hdu3232
- JMM介绍
- Runtime类
- [LeetCode]Longest Substring Without Repeating Characters
- Labwindows/CVI下调用openCV实现多摄像头切换
- 母函数之Big Event in HDU hdoj 1171