前言
加减法我们都学过,但这和编译原理又有什么关系呢?本文就从加减法开始,为你阐述编译原理的最基本操作:语法分析
和编程语言一样,四则运算也是有自己的语法和规则,因此,计算过程=语法分析+运算
现在就以最简单的加减法为例,分析其中的语法规则
分析
对于一个简单的公式 (expr),我们可以将其两个部分
- number
- operator
如 1+2
进而我们可以得出
考虑减法的情况
现在,让我们稍稍拓展开来,对于多位数相加:1+2+3,根据上面的条件,可以推导出
对于
认真观察就会发现,(1)可以往左边无限制推导形成左递归
但是,我们在处理字符串的时候,是从左往右进行处理的,因此,左递归对于处理来说非常不利,所以我们可以将其改写为右递归,也就是
这样一来,我们就可以得到加减法的语法
通过这些文法,我们就能推导任意的加减法式子,如
实现
说完理论,就要说下具体的实现了,其实也很简单,比如一个,我们将
1+2作为一个字符串
然后不断从字符串中提取字符,伪代码如下
从expr中匹配一个数字x
while(expr还有剩余字符)
{
匹配一个符号op
匹配一个数字y
执行操作 x = x op y
}