有些计算器,只能进行单步计算,就是说只能输入数字和加减乘除四则运算符号,而不能有括号的出现。可编程计算器就是指能输入括号、数字和四则运算符号,并对所输入的四则运算表达式进行分析,得最终计算出结果的计算器。
不多说下面用编译原理里面讲过的SLR文法来实现。
其实还有一种比较简单的方法——用栈来实现,可以看这里:http://blog.csdn.net/he_qiao_2010/article/details/8710495。
可编程计算器的SLR文法实现(表达式求值)
0. 在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。它可以使语言中的每个句子都能用严格定义的规则来构造。说白了类似于语文里面遣词造句的一种规则。比如一个句子的一般形式就是主、谓、宾,即:句子——>主谓宾。那么要构造一个句子,就只需要主语、谓语、宾语按照这个顺序排列就够了。在我们想设计的这个可编程计算器中数字就是0-9这十个数字,即:num——>[0-9]+。(这里+表示某个集合中的元素可以重复出现多次,但至少出现一次)这个实际上是正则表达式,也是文法的一类。
1. 在讲什么是SLR之前先说一下LR在编译技术里面的概念。LR(k)是指一种高效的、自下而上的针对于上下文无关的文法分析技术,其中L是指从左向右扫描输入,R是指构造最右推导的逆,而k是指决定分析动作时向前找的符号的个数。而SLR是LR方法中最简单的一种。&#