perl – Safe.pm base_math作为数学计算器和新变量
我不想编写我自己的递归下降数学解析器或者深入思考语法,所以我(重新)使用Perl模块
Safe.pm作为带变量的算术计算器.我的任务是让一个匿名的Web用户将一个类型放入一个文本字段中的几个数学表达式,如:
**Input Formula:** $x= 2; $y=sqrt(2*$x+(25+$x)*$x); $z= log($y); ... 理想情况下,这应该只包含数学表达式,而不是通用的Perl代码.后来,我想将它用于网络用户B: **Input Print:** you start with x=$x and end with z=$z . you don't know $a. 到< pre>文本输出如下所示: **Output Txt:** you start with x=2 and end with z=2.03 . you don't know $a. ($a没有被替换的事实是它自己的警告.)理想情况下,我想检查我的网络用户不仅没有尝试入侵,而且没有语法错误. 我目前基于Safe.pm的实现有一些缺点: >我只想在第一个文本字段中使用数学表达式.唉,:base_math只将Safe.pm扩展到:base_core以外,所以我不得不忍受用户不仅可以访问数学代数表达式.例如,Web用户可能会意外地尝试使用Perl保留名称,定义subs,或者谁知道什么.有没有更好的解决方案,只选择递归下降数学语法解析器? (并且,不应该允许子系统()使用数学函数!) 问题: > Safe.pm是适合这项工作的合适工具吗? Perl在这里看起来像一个沉重的大炮,但不必重新发明轮子是很好的. 解决方法
Safe.pm似乎是一个糟糕的选择,因为你将冒险忽视一些可利用的操作.我建议看一个解析工具,比如
Marpa.它甚至有一个
calculator implementation的开头,你可能可以适应你的目的.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |