一、表达式的组成
1、数字
2、运算符:+ - / * ^ % =
3、圆括号
4、变量
二、运算符优先级
由高到低分别为:+-(正负号)、^、*/%、+-、=
优先级相等的运算符按照从左到右的顺序计算
三、关键技术点
1、确定运算的优先级,从高到低分别为:原子元素表达式,包括数字和变量;括号表达式;一元表达式,取数的负数;指数表达式;乘、除、取模表达式;加、减表达式;赋值表达式。
2、对于每一级别的运算,都由一个方法实现,在方法中先完成比自己高一级别的运算,再处理本级别的运算。因此,在计算整个表达式的主方法中,只需要调用最低级别的运算的实现方法即可。
3、确定表达式中的分隔符,(+、-、*、/、%、^、=、(、)、)。利用这些分隔符将表达式分成多段,每一段叫做一个token,分隔符也算token。
4、用长度为26的int数组vars存储变量的值。
5、Character的isWhitespace方法判断字符是否为空白符,用于去掉表达式中的空白符。
6、Character的isLetter方法判断字符是否为字母,用于提取表达式中的变量
7、Character的isDigit方法判断字符是否为数字,用于获取表达式中的数字
四、演示实例
输出结果:
exp1("a = 5.0") = 5.0
exp2("b = 3.0") = 3.0
exp3("(a + b) * (a - b)") = 16.0
exp4("3*5-4/2") = 13.0
exp5("(4 - 2) * ((a + b) / (a - b))") = 8.0
exp6("5 % 2") = 1.0
exp7("3^2 * 5 + 4") = 49.0
五、实例分析
表达式的解析,实际就是一个表达式的分解过程。根据分隔符将表达式分成若干段。然后计算每一段的值,最后都会归结到一个原子表达式。
分享到:
相关推荐
表达式解析器是诸如“ sin(pi / 4)”之类的字符串的解析器,它可以在Java,C ++和javascript语言上实现。
一个将cron表达式转换为人类可读字符串的Java库。 从转换为Java。 原始作者和信誉:Brady Holt( )许可证:麻省理工学院 特征 支持所有cron表达式特殊字符,包括* /,-? LW,#。 支持5、6(w /秒或年)或7(w ...
数学表达式解析器4 Java MEP4J是用于Java的高性能数学表达式字符串解析器(J2SE> = 5)。 将其与同类库的性能进行比较,并让我知道您的经验。 该库管理5个运算符(+,-,/,%,*)以及以下功能:-“ abs”-“ cos”...
Haye是一个简单的超快速字符串表达式解析器。 在支持pipe和qs字符串表达式中(如下所述)。 限制表达式中的键/值不能具有任何保留的关键字,否则解析器将表现异常。 基准测试 haye #pipeToArray x 741,030 ops/sec...
评估存储在字符串中的数学表达式的库。 库是用Swift v1.2编写的。 它将类似这样的内容:“ 1234769.1234 * 1238746-1234(-12)^ 2”更改为:1,529,565,134,839.26。 有人会说这是纯粹的魔术! 该库的Java分支...
/\s+java\s+/ //匹配字符串"java" ,并且该串前后可以有一个或多个空格. /[^"] * / //匹配零个或多个非引号字符. 正则表达式的复制字符 字符 含义 ________________________________________________________...
22. 匹配由26个英文字母的大写组成的字符串 23 匹配由26个英文字母的小写组成的字符串 24 匹配由数字和26个英文字母组成的字符串; 25 匹配由数字、26个英文字母或者下划线组成的字符串; java源码: /* * Created ...
表达式解析器该程序使用“有限状态机”方法解析一串数学表达式并计算其结果。
java.util 包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 java.util.concurrent 在并发编程中很常用的实用工具类...
ArrayString.java 字符串数组 assignTwoDime.java 为二维数组赋值 getMaxElem.java 获取数组中的最大元素 incCapicity.java 演示StingBuffer的容量增长 SortDemo.java 排序示例 travelTwoDime.java 遍历二维...
java 表达式解析 源码+文档 本表达式解析器使用java语言实现。 支持算术运算、逻辑运算、比较运算, 支持if分支结构的解析, 支持在表达式中使用自定义函数, 支持多种数据类型:数字、日期、字符、字符串、布尔。
* 从json数组中解析出java字符串数组 * @param jsonString * @return */ /** *//** * 从json数组中解析出javaLong型对象数组 * @param jsonString * @return */ /** *//** * 从json数组中解析出java ...
a^=b 字符串a是否以字符串b开头 a startwith b 返回Boolean a*=b a是否包含b, a contains b 返回Boolean a$=b a是否以b结尾 a endwith b 返回Boolean a~=b a的内容是否符合 正则表达式b 返回...
正则表达式 简单,快速的正则表达式匹配器。 这是一个非常基本的正则表达式匹配器,完全... 然后在状态机中模拟给定的字符串。 所有可能的下一个状态同时被“继续”。 在输入的末尾,如果我们处于的任何状态都是最终
表情符号阅读器一个能在字符串中识别出Emoji的简单工具(支持JavaScript / Java)特性支持Unicode12规范,基于EBNF状态机的Emoji判断,比正则表达式更易维护准确判断包含Emoji的轴向长度准确切割字符串不会断开Emoji...
PMD是一款采用BSD协议发布的Java程序代码检查工具。该工具可以做到检查Java代码中是否含有未使用的变量... 3、JSP/JSF 解析器支持 Unicode 4、可处理 标签; 5、AST HtmlScript 节点包含内容,支持 Ecmascript 等等
该项目提供了一个数学解析器,用于将简单的字符串表达式转换为结果,可以将其管理以用于其他计算(全部使用Java)。 使用几行代码,您将能够高效地解析复杂的算术表达式。 该库由Dijkstra的Shutting-yard算法提供...
设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...
设定字符串为“张三,你好,我是李四” 产生张三的密钥对(keyPairZhang) 张三生成公钥(publicKeyZhang)并发送给李四,这里发送的是公钥的数组字节 通过网络或磁盘等方式,把公钥编码传送给李四,李四接收到...
表达式解析器;字符串编码的转换;字符串对齐器;密码加密和验证(MD5); 制作命令行程序;使用正则表达式操作字符串;使用正则表达式验证电话号码的格式; 6java异常处理 throw和throws、try和catch;自定义异常类...