On 03/22/2011 11:27 PM, Ilya Pupatenko wrote:
As I understand, the library should allow programmer to write grammar directly
in D (ideally, the syntax should be somehow similar to EBNF) and the resulting
parser will be generated by D compiler while compiling the program. This method
allows integration of parsing in D code; it can make code simpler and even
sometimes more efficient.

Do you mean the grammer itself to be D source code? (Instead of EBNF-like plain text compiled by a parser generator.) If yes, then you may have a look at pyparsing for a similar tool: a python parsing lib in which the grammer is written in python. The particular point of pyparsing is that it is based on PEG, which you may lkike or not.

I have used it for a while, it works very fine, practically. What I don't like is its using of syntactic tricks to make pattern expressions supposedly more "natural", but in fact creates an obstacle in beeing itself a parallel language to be learnt. For this reason and some others, I wrote a variant (2, in fact) where patterns really are plain source code without tricks, eg:
        digits = String(Klass("0..9"))
        sign = Choice(Char('+'), Char('-'))
        integer = Compose(Optional(sign), digits)
I have an implementation of such a parsing lib in and for D (mostly working, but probably with many points to enhance, in particular for performance). It allows associating "match actions" to patterns:
        integer = (new Compose(Optional(sign), digits)) (toInt);
        plus = (new Char('+')) (drop)
        intSum = new Compose(integer, plus, integer) (doSum);

Denis
--
_________________
vita es estrany
spir.wikidot.com

Reply via email to