Hello everyone,

I thought the Java guys among you might be interested in a new, open  
source Java 1.5+ library supporting PEG parsing in a pretty unique way.
http://www.parboiled.org was born out of frustration over existing  
parser generators with their external grammar files that lack IDE  
support and are often just a little bit too hard to integrate in real- 
world projects.

parboiled let's you specify your PEG grammar rules right in Java source.

Small example:
Consider the following grammar (a classical calculator example):

Expression ← Term ((‘+’ / ‘-’) Term)*
Term ← Factor ((‘*’ / ‘/’) Factor)*
Factor ← Number / ‘(’ Expression ‘)’
Number ← [0-9]+


A parboiled parser definition, complete and in ready-to-compile Java  
code would look like this:


public class CalculatorParser extends BaseParser<Object,  
Actions<Object>> {

     public Rule expression() {
         return sequence(
                 term(),
                 zeroOrMore(
                         sequence(
                                 firstOf('+', '-'),
                                 term()
                         )
                 )
         );
     }

     public Rule term() {
         return sequence(
                 factor(),
                 zeroOrMore(
                         sequence(
                                 firstOf('*', '/'),
                                 factor()
                         )
                 )
         );
     }

     public Rule factor() {
         return firstOf(
                 number(),
                 sequence('(', expression(), ')')
         );
     }

     public Rule number() {
         return oneOrMore(charRange('0', '9'));
     }
}

Your rule definitions can also include direct calls to action methods  
which will behave as expected, they are called at the right time  
during the parsing run.
parboiled supports AST construction in a very flexible way and has a  
few other, quite neat features (like proper parse error recovery,  
white space gobbling and so on). It currently implements a recursive  
descent parser, but could be extended to support packrat parsing as  
well without too much trouble.

The source and a rather full-blown documentation currently lives at  
github, which you are forwarded to from http://parboiled.org.

Maybe you like the approach and are willing to provide feedback... I'd  
be happy to receive any.

Cheers,
Mathias

---
math...@parboiled.org
http://www.parboiled.org


_______________________________________________
PEG mailing list
PEG@lists.csail.mit.edu
https://lists.csail.mit.edu/mailman/listinfo/peg

Reply via email to