我用eval试过, 不太好, 经常报错, 如果那位有整体的语法解析类能给一个就更好了! 谢谢了!
解决方案 »
- 请问这个网站的首页动画是用什么技术实现的?
- 学习PHP用的什么教材最好!
- PHP用dreamweaver开发怎么样?
- $str="这是$a"; $a="杯子";print $str;这样的顺序,有没有办法输出:这是杯子?
- 求一段php调用txt文件数据并赋值的代码
- 请教关于树状结构问题
- 我的mysql已经可以连了,可是mysql_front 只能对数据库进行删除操作!
- who 有php+iis 的网站例子啊??????
- 用php输出语句进行显示时整型数变成了(100.00)日期型数变成了(1999-1-1 00:00:00.000)
- php能将上传的图片,放到变量中进行操作吗?
- 菜鸟求助
- 如和获取客户端COOKIE并限制该客户端24小时不能在访问答题?
if($a=="a"){
name="tom";
}elseif($a==b){
name=="jay";
}else{
name="hello";}
比如yacc
{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}.则结束循环。循环结束。
{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、继续循环。
循环中的顺序可能需要调整下。
若是,可参考成熟的模板引擎的写法识别形如 {....} 的串是很容易的
$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] =>
)接下来做什么,你没说,我也就不知道了
最关键的问题是PHP如何来处理分支结构中的表达式呢?比如:
{if:(表达式)}{switch:(表达式)}用什么办法/函数能对该表达式进行逻辑运算呢?
http://code.google.com/p/jssmarty/