我用eval试过, 不太好, 经常报错, 如果那位有整体的语法解析类能给一个就更好了! 谢谢了!

解决方案 »

  1.   

    不知道你说什么?
    if($a=="a"){
    name="tom";
    }elseif($a==b){
    name=="jay";
    }else{
    name="hello";}
      

  2.   

    其实就是想要找一个能解析某种特定语法的PHP类,比如能解析 类C语言.
      

  3.   

    直接看php帮助手册,写得很清楚啊~
      

  4.   

    借助语法分析器的思想。
    比如yacc
      

  5.   

    本来PHP就是解释型的语言,如果再写一个分析语法的功能会不会把速度降低很多呢?
      

  6.   

    要解析的内容: 
    {if:(表达式)} 
    ... 111
    {else} 
    ... 222
    {end if} 1、获得所有{}里的内容以及 {if:(表达式)} {else} {end if} 之间的内容,存到一个数组里。array[]
    这时候:
    array[0]={if:(表达式)}array[1]=... 111array[2]={else} array[3]=... 222array[4]={end if}
    2、获得array[]的个数,并执行循环。循环开始:$i=03、如果array[$i]中的表达式为真。
    4、则执行array[$i+1],如输出。
    5、array[$i]中的表达式为假.
    6、则执行array[$i+2]
    7、若array[$i+4]为{else}.
    8、则继续循环。
    9、若array[$i+4]为{end if}.则结束循环。循环结束。
      

  7.   

    把{} 内的和{} 外的用两个不同的数组表示,能更好的控制。因为switch的出现,才想到的。{switch:(表达式)} 
    {case:值1} 
    ... 111
    {case:值2} 
    ... 222
    {default} 
    ... 333
    {end switch}1、第一步一样。
    2、不同的是
    array[0]={switch:(表达式)}array[1]={case:值1} arrayb[0]=... 111array[2]={case:值2}  arrayb[1]=... 2223、1、获得array[0]的表达式。
    循环开始。$i=0
    2、获得array[$i+1]的表达式。
    3、若相等,则执行$i.
    4、若不等,则继续
    5、若发现default,则执行$i
    6、若发现end switch 则结束。
    7、继续循环。
    循环中的顺序可能需要调整下。
      

  8.   

    那PHP用什么函数来处理表达式呢?比如 $i=0 这个表达式, 是用eval吗? 好象又不是。试过总报错。
      

  9.   

    是在做模板引擎吗?
    若是,可参考成熟的模板引擎的写法识别形如 {....} 的串是很容易的
    $code =<<< CODE
    {if:(表达式)} 
    ... 
    {else} 
    ... 
    {end if} {switch:(表达式)} 
    {case:值1} 
    ... 
    {case:值2} 
    ... 
    {default} 
    ... 
    {end switch} 
    CODE;$ar = preg_split("/({.*?})/s", $code, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);print_r($ar);Array
    (
        [0] => {if:(表达式)}
        [1] =>  
    ...     [2] => {else}
        [3] =>  
    ...     [4] => {end if}
        [5] =>  
        [6] => {switch:(表达式)}
        [7] =>      [8] => {case:值1}
        [9] =>  
    ...     [10] => {case:值2}
        [11] =>  
    ...     [12] => {default}
        [13] =>  
    ...     [14] => {end switch}
        [15] =>  
    )接下来做什么,你没说,我也就不知道了
      

  10.   

    用正则表达式取出这些内容已经没问题了,
    最关键的问题是PHP如何来处理分支结构中的表达式呢?比如:
    {if:(表达式)}{switch:(表达式)}用什么办法/函数能对该表达式进行逻辑运算呢?
      

  11.   

    编译原理-分析法和逆波兰式像你这种直接向Php转换就可以了。复杂的你又做不来。Js的例子:
    http://code.google.com/p/jssmarty/