Since I am not about to add another language to the rather abundant number of scripting languages on offer, nor am I capable of doing such a development, I decided I could do a pre-compiler or, in this case a pre-interpreter, a program that would read and parse the source with the extended instructions and turn them into the plain base language. After some trials I settled (for the time being) on PHT, which is a merge of PHP and HTML though, of course, it generates XML, not just HTML.
When I was satisfied with the syntax I tried to build the pre-compiler using YACC and Lex (actually, Bison and Flex) the same tools the PHP interpreter uses. It proved too much for me since I never had any formal training in computer science. Someone suggested I tried JavaCC, which I did, and in a couple of weeks I had a working parser, modified from a C parser which did nothing but go through the PHP source files parsing them. Two more weeks went by running the pre-compiler through the PHP 5.0 test suite fixing errors in the parser until I got to an acceptably short to-do list, and then added a single action to the whole parser, just a pass-through action for most of the code.
I modified the parser to add the <, & and ? instructions and the
corresponding actions, which was unexpectedly easy, so in one more week I got to
the point when I could actually write any of the previous examples into a .PHT
file (then called .PhpSt) and pre-compile it to a .PHP file and it worked. So I started
un-pre-compiling (going from regular PHP to PHT) some programs I had and
running them through the pre-compiler and they worked! So far, I had my two blocks structures working nicely with each other, my
editor a little confused but accepting it tolerably well and my pre-compiler
running Ok. Even the PHP documenter ignored my added instructions and
produced documentation without a problem.
But I realized I would never be able to grow this into what I wanted. Besides, the base I used for the pre-compiler was a C parser which might eventually prove not to work exactly as the PHP parser does and I was actually starting to find some cracks in it with some singular PHP constructs. Anyway, I learned a lot with it, which was good.
Fortunately, I saw an announcement for an open source PHP compiler, not the equally open-source PHP interpreter, but a compiler which suited me far better. It provided me with a full parser for PHP version 5 (current), which produced a very clear and sound tree representation of the program, and several unparsers, one of them back to cleaner PHP code and another two, a graphical representation and an XML representation, both of which give a clear view of how the tree is structured.
Most important of all, it has a very good programming interface to traverse and transform the tree. A few releases afterwards, the authors came with a plug-in interface, which made the whole project even easier, and that's what I used for the current release. On a practical level, though, the most important issue for me was that the authors have set up a mailing list to support it and have been very patient with my questions, for which I am thankful.
The current version 2 works with phc-0.1.7rc2 which can be downloaded from the PHC site.
A full download of PHT, that is, PHC already modified, is available as a tar file: pht-0.1.7rc2.2.tar.gz.
[The previous (version 1) is at pht-0.1.7rc2.1.tar.gz]
For details about the current release, you may follow the index below. To keep going with the overview, you may press Next > at the bottom.
| < Previous: Formal Definition |