[antlr-interest] Strange parse result

Mark Christiaens mark.christiaens at sigasi.com
Fri Jan 14 07:52:49 PST 2011


Yes, that's right.  It's clearly a conflict with the ':' and the ':=' token
and using another character avoids the problem.  I can't do that though
since I'm trying to build a grammar for VHDL; the language is a given.

Mark

On Fri, Jan 14, 2011 at 4:48 PM, Søren Kristiansen <sorenkris at gmail.com>wrote:

> Not sure your assumption about look ahead is correct but the gurus will
> have
> to answer that ;-)
>
> Try changing RULE_EQUALS to match  ';=' and  15;=0 as input will give the
> expected result.
>
> Regards
>   Soren
>
> 2011/1/14 Mark Christiaens <mark.christiaens at sigasi.com>
>
> > That was my first guess too but I doubt that that is the cause.
> >
> > Without the space, I expect it to see the 15 (corresponding to
> > the ('0'..'9')+ part) and then look ahead and see that the next part must
> > start with a ':' followed by a number.  Since it doesn't see a number (it
> > sees a '=') it should end the RULE_ABSTRACT_LITERAL.  Then parsing can
> > continue and would start from the ':' to match the RULE_EQUALS and then
> > again the RULE_ABSTRACT_LITERAL.
> >
> > Mark
> >
> >
> > On Fri, Jan 14, 2011 at 4:30 PM, Søren Kristiansen <sorenkris at gmail.com
> >wrote:
> >
> >> Hi Mark,
> >> Without the space before ':=', 15: will match your
> >> RULE_ABSTRACT_LITERAL rule and then '=' can't be
> >> matchted.
> >>
> >> Regards
> >>    Soren
> >>
> >> 2011/1/14 Mark Christiaens <mark.christiaens at sigasi.com>
> >>
> >>> I have a small test grammar:
> >>>
> >>> grammar test_grammar;
> >>>
> >>> testrule : t*;
> >>> t: RULE_EQUALS | RULE_ABSTRACT_LITERAL | RULE_WS ;
> >>> RULE_EQUALS : ':=';
> >>> RULE_ABSTRACT_LITERAL : ('0'..'9')+ (':' ('0'..'9')+ ':')?;
> >>> RULE_WS : (' '|'\t')+;
> >>>
> >>>
> >>> When I debug this grammar (with ANTLRWorks 1.4.2 using ANLTR 3.3) I
> feed
> >>> it
> >>> the input (no spaces)
> >>>
> >>>
> >>> 15:=0
> >>>
> >>>
> >>> and it doesn't parse my input correctly.  When I change the input to
> >>> (adding
> >>> space before ':=')
> >>>
> >>> 15 :=0
> >>>
> >>> it parses successfully.  Any ideas what I'm missing here?
> >>>
> >>> Mark
> >>> --
> >>> <http://www.sigasi.com>
> >>>
> >>> Mark Christiaens, PhD
> >>> Expert Research Engineer
> >>> www.sigasi.com
> >>>
> >>> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> >>> Unsubscribe:
> >>> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
> >>>
> >>
> >>
> >
> >
> > --
> > <http://www.sigasi.com>
> > Mark Christiaens, PhD
> > Expert Research Engineer
> > www.sigasi.com
> >
> >
>
> List: http://www.antlr.org/mailman/listinfo/antlr-interest
> Unsubscribe:
> http://www.antlr.org/mailman/options/antlr-interest/your-email-address
>



-- 
<http://www.sigasi.com>
Mark Christiaens, PhD
Expert Research Engineer
www.sigasi.com


More information about the antlr-interest mailing list