Optimize parsing of negative numbers?
| From: | Matt Wilmas | Date: | Wed, 14 Mar 2007 11:12:21 +0000 |
| Subject: | Optimize parsing of negative numbers? | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-28336@lists.php.net to get a copy of this message | ||
Hi all,
I realized awhile ago that PHP creates a ZEND_SUB opcode even with a literal
number after the '-' (-123), which of course causes the number to be negated
each time it's used during runtime. So a few months ago, and again
recently, I took a look at the parser grammar to see if I could get these
"common_scalar"/numbers to be negated once in parse/compile stage (like
"static_scalar") but didn't really get anywhere. :-/ Just "reduce/reduce
conflicts" even if the rules seem like they should work (but I have no idea
about this Bison stuff!). Well, there was one way I eliminated the
conflicts, but it seems kinda sloppy and no idea if it would actually work.
For the Bison gurus, is there a simple way this could be done with a little
grammar rearranging? Of course there would be a runtime improvement with
negative numbers, but it should also compile faster, skipping opcode
creation, etc.
BTW, for "expr_without_variable", '+' expr generates ZEND_ADD. As far
as I know there's no point to that, right? ;-) Its action should simply be
$$ = $2;
Thanks,
Matt
P.S. Here on Windows, I wouldn't be able to test any parser changes
anyway -- Bison is somehow creating wrong files or such since if it's run
with a default zend_language_parser.y, I then get "unexpected ..." parse
errors that are obviously bogus. Any ideas?