Re: Simple expression parser for PHP. [message #179759 is a reply to message #179754] |
Mon, 03 December 2012 19:59 |
Thomas 'PointedEars'
Messages: 701 Registered: October 2010
Karma:
|
Senior Member |
|
|
Daniel Pitts wrote:
> On 12/2/12 3:45 AM, Thomas 'PointedEars' Lahn wrote:
>> Daniel Pitts wrote:
>>> On 12/1/12 9:58 AM, Thomas 'PointedEars' Lahn wrote:
>>>> Daniel Pitts wrote:
>>>> > I have a requirement that I need to take an expression and evaluate
>>>> > it.
>>>> >
>>>> > I'd very much like to avoid using PHP's eval(), for obvious
>>>> > reasons.
>>>> > I'm kind of looking for something that is similar to OGNL (a Java
>>>> > library for expressions).
>>>> >
>>>> > Speed is a plus, ease of integration is a nice-to-have. Low bug
>>>> > density and active community is also a plus.
>>>>
>>>> What kind of expression are you talking about?
>>>
>>> Things along the lines of "request['some_attribute']" or "3 * someValue"
>>> etc... Where I can specify the objects available to act upon ('request'
>>> in the first example, 'someValue' in the second).
>>>
>>> Some method of traversing object graphs would be useful as well. Like I
>>> said, something similar to OGNL, but for PHP instead.
>>
>> What do you need this for?
> A program I'm writing. What's it to you?
I am someone who could help you solve this problem.
> I've given the specific requirements. ;-)
ISTM you want a person writing or finding that software for you without any
real effort on your part. If so, you are wrong here; there are smart but
starving PHP developers out there who you should *pay* for that instead.
The smiley does not change anything.
> More specifically, it is to ease configuration of my program. The
> expressions are going to be embedded into a DSL (domain-specific
> language) for declaring a part of the business logic.
I would suggest you look more into the features of PHP instead of inventing
another OGNL-like expression language to be parsed with PHP. Without
knowing OGNL [1] well or having used it before, ISTM that many of the things
that OGNL extends Java syntax with are built into PHP these days.
For example, accessing properties instead of calling methods is facilitated
with the __get() and __set() magic methods. [2] PHP 5.4 even allows
accessing the items of array return values directly, which allows for
“$root->foo()["bar"]” or “$root->foo()[0]”. [3] (For PHP 5.3 there can be a
fallback, line “$root->foo()->items(0)”).
Further inspiration, which is probably going to use closures (introduced in
PHP 5.3, improved in PHP 5.4 [3]), can be drawn from Microsoft LINQ [4];
there is an implementation of that in PHP already [5]. Even if that is not
useful to you, writing that parser (using PHP's PCRE support [6]) should not
be too difficult a task.
> I'm trying to avoid using "eval" or forcing someone to write a PHP
> function and reference that function by name.
I can understand that and, JFYI, I had understood that already.
> Most of the time, the expressions are so simple, and only make sense in
> the context they appear in the DSL.
If you say so.
PointedEars
___________
[1] <http://commons.apache.org/ognl/>
[2] <http://php.net/manual/en/language.oop5.magic.php>
[3] <http://php.net/manual/en/migration54.new-features.php>
[4] <http://msdn.microsoft.com/en-us/library/vstudio/bb397926.aspx>
[5] <http://phplinq.codeplex.com/>
[6] <http://php.net/manual/en/book.pcre.php>
--
realism: HTML 4.01 Strict
evangelism: XHTML 1.0 Strict
madness: XHTML 1.1 as application/xhtml+xml
-- Bjoern Hoehrmann
|
|
|