[antlr-interest] Implementation decision help

Loring Craymer lgcraymer at yahoo.com
Wed Jul 8 06:02:49 PDT 2009


Grammars like this one have usually been developed with LR tools (yacc, bison, ...) and have been right-factored.  What you want is to left-factor the grammar (not just inline the stmtXX bodies as you describe, but also extract new rules to avoid having single large rules.  ANTLRWorks can help.

I also suggest writing a BNF translator to do the initial grammar conversion.  Such translators tend to be quite small (100-300 lines) and are a lot less work than doing the initial conversion by hand.

--Loring



----- Original Message ----
> From: Gustaf Johansson <gustaf.j at gmail.com>
> To: antlr-interest at antlr.org
> Sent: Wednesday, July 8, 2009 4:59:08 AM
> Subject: [antlr-interest] Implementation decision help
> 
> Hello!
> 
> I am trying to implement the ETSI TTCN-3 BNF into Antlr.
> The major part is done and working as it should but there are some
> quirks which i don't know how to solve.
> 
> I have rules like this:
> stm : stmGroup1 | stmGroup2 ... | stmGroupX;
> 
> And all/some of these stmGroup's can start with the same type of
> token, but they are distinguishable by some token along the line
> further down the parse tree.
> 
> I have tried to solve this by using backtrack=true which didn't work.
> 
> My current solution is a specific order of the stmGroup's and a few
> syntactic predicates. But i don't like this solution since i don't
> know if it will work for all possible input (the grammar is really
> complex).
> 
> Basically what i want to accomplish is make Antlr try all of the rules
> in "stm" and only report error if none of them matches. Currently it
> reports errors even though a rule later in the list will match the
> input completely, just because the rule reporting the error matches it
> partly.
> 
> The only solution other then syntactic predicates and backtrack i can
> think of is to combine the stmGroup's into a rule which has truly
> distinctive paths depending on the next token.
> Is this the way to do it?
> It will require a huge amount of work since all the stmGroup's are
> quite large and complex themselves. Also it will make the grammar
> almost unreadable.
> 
> 
> 
> An example of a problematic rule is:
> http://www.trex.informatik.uni-goettingen.de/trac/wiki/ttcn-3_4.0.4#FunctionStatement
> 
> These are two parts of that problem:
> -> ConfigurationStatements -> StartTCStatement
> -> TimerStatements -> StartTimerStatement
> 
> PS. backtrack is not used at all in the grammar.
> 
> BR Gustaf
> 
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe: 
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address



      


More information about the antlr-interest mailing list