在将用户输入的PHP代码传递给eval()之前验证它

hid*_*ani 7 php

在将字符串传递给eval()之前,我想确保语法正确并允许:

  1. 两个函数:a()和b()
  2. 四个运营商:/* - +
  3. 支架:()
  4. 数字:1.2,-1,1

我怎么能这样做,也许它与PHP Tokenizer有关?

我实际上是在尝试创建一个简单的公式解释器,所以a()和b()将被ln()和exp()替换.我不想从头开始编写tokenizer和parser.

Pet*_*ter 2

解析器生成器确实已经为 PHP 编写,并且“LIME”特别附带了典型的“计算器”示例,这将是您的“迷你语言”的明显起点: http: //sourceforge.net/projects/lime -php/

自从我上次玩 LIME 以来已经有很多年了,但那时它已经很成熟和稳定了。

笔记:

1)如果你愿意,使用完整的解析器生成器可以让你完全避免 PHP eval() - 你可以让 LIME 发出一个解析器,它有效地为用你的迷你语言编写的表达式提供“eval”函数(带有验证)在)。这为您提供了额外的优势,允许您根据需要添加对新功能的支持。

2) 乍一看,使用解析器生成器来完成这样一个看似很小的任务似乎有点大材小用,但是一旦你让示例工作起来,你就会对修改和扩展它们是多么容易感到印象深刻。而且很容易低估从头开始编写一个无错误的解析器(即使是“微不足道”的解析器)的难度。