与/或表达式化简,与/或表达式化简
【 tulaoshi.com - C语言心得技巧 】
与/或表达式化简
    
    作者:袁国桃 (西安理工大学 计算机学院)
a*[b*[c+d]*e+f]+g化简后要得到如下的表达式:
a*b*c*e+a*b*d*e+a*f+g表达式中允许的字母和算符
      {A-Z, a-z, [,],*,+}    其中“[,]”表示括号,允许嵌套;“*”表示逻辑运算符“与”;“+”表示逻辑运算符“或”;并且“*”的优先级高于“+”。exp-exp addop term|term addop-+|- term-term mulop factor|factor mulop-* factor-(exp)|number其中“exp”代表待求值的表达式;“addop”代表“+”和“-”运算符;“term”代表用“*”连接起来的表达式;“mulop”代表“*”;“factor”代表乘积因子,它可以是一个数,也可以是一个表达式。
      exp-term { OR term }|term          OR-+ term-term AND factor|factor AND-* factor-[exp]|letter letter-[A-Z]|[a-z]去除左递归后如下所示:
      exp-term { OR term }      OR-+      term-factor { AND factor }       factor-letter|[exp]      AND-*      letter-[A-Z]|[a-z]      这样,我们就很容易将其转化为代码。比如,将“exp-term { OR term }”这个表达式转化的伪代码如下:CString exp(){  CString temp = _T("");  try  {    temp = Term();    while( 当前还没有到输入串的末尾 && 下一个将要扫描的字符为OR )    {      temp += "+";      Match(OR);//字符匹配,用户判断将要扫描的字符是否为所期望的字符,并且推动扫描串的前进      temp += Term();    }  }  catch(CError& error)  {    throw error;   }  return temp;}        其它的产生式对应的代码类似,具体细节就不叙述了,请大家参考参考源程序。
来源:http://www.tulaoshi.com/n/20160129/1485192.html