算式的解析算法

WBOY
发布: 2016-07-29 08:55:34
原创
1368 人浏览过

这几天没事就用php写了一个解析程序。

例如:(21*12-23-(21+14-(21-31/3+(14-21*12-14))+54)-21)+21*25-22*26

然后解析的结果就是:-169.33。

现将代码贴出,如果有不妥的地方还请各位程序员朋友们指出。

if(isset($_GET['sizhi'])){
    $sizhi=$_GET['sizhi'];
    if(!checkSizhi($sizhi)){
      echo('算式不合法,检查括号是否配对');
    }else{
     $sizhi=priority($sizhi);
     echo(calculate($sizhi)); 
    }
}
 //检查算式是否合法
function checkSizhi($sizhi){
    $Amatch=array();
    $pattern='/((\d|!)\()|([-\+\*\/]\))|[^-\+\*\/!\d\(\)]/';
    if(preg_match($pattern,$sizhi,$Amatch)>0){
      echo('不合法的元素:');
      print_r($Amatch);
      return false;
    }else{
      $kuohao=0;
      for($i=0,$k=strlen($sizhi);$i0){
     echo("阶乘阶段出问题,请改算式");
     exit();
  }else{
    //替换所有阶乘的部分
   $sizhi=preg_replace_callback($par,function($siz){
          return calculateFactorial($siz[0]);
    } 
      , $sizhi);
  }
  //交换符号与数字并计算  
  return change($sizhi);
}
//计算阶乘
function calculateFactorial($sizhi){
      for ($i=0; $i <strlen if for return calculatefactorial function change preg_match_all sum substr calernu calut switch case>0){
            $str=$array[0];
           }
         return $str;
    }
}</strlen>
登录后复制

以上就介绍了算式的解析算法,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板