[antlr-interest] Recursive rule invocation

Martijn Reuvers martijn.reuvers at gmail.com
Sat Aug 29 05:53:36 PDT 2009


Not sure if that actually solves it. Hard without having the grammar
to test it..

I think 'markup: IDCON attributes arguments?' is one of the trouble
makers, to be precise the attributes argument. As that goes to
'attribute' and that has options such as '#' IDCON. I think in that
case the parser does not know what IDCON is for (markup or attribute
rule). Not sure, just guessing here.. You could replace the IDCON in
markup with something else (e.g. '???') to see if it helps reduce the
errors.

Maybe someone else can shed some light?


On Sat, Aug 29, 2009 at 2:20 PM, Martijn
Reuvers<martijn.reuvers at gmail.com> wrote:
> Hi Jeroen,
>
> I would rewrite the markupStatement like this:
>
> markupStatement :
>  markup+ (expression | regularStatement | embedding)? ';'
>
> That way its valid again. The markup+ in each of your choices is the
> problem now I guess.
>
> Martijn
>
> On Sat, Aug 29, 2009 at 12:57 PM, Jeroen van
> Schagen<jeroen.v.schagen at gmail.com> wrote:
>> Can somebody please tell me what is recursive about the markupStatement
>> production in the following grammar? The problem disappears when I remove
>> the expression NT symbol from argument, but this is required for my
>> language. Is it solvable without having to enable backtracking?
>> markupStatement: markup+ expression ';'
>> | markup+ regularStatement ';'
>> | markup+ embedding ';'
>> | markup+ ';'
>> ;
>> where..
>> markup: IDCON attributes arguments?
>> -> ^( MARKUP IDCON attributes arguments? ) ;
>> attributes: attribute*
>> -> ^( ATTRIBUTES attribute* );
>> attribute: '#' IDCON // ID attribute
>> | '.' IDCON // Class attribute
>> | '$' IDCON // Name attribute
>> | ':' IDCON // Type attribute
>> | '@' NATCON // Width attribute
>> | '@' NATCON '%' NATCON // Width-height attribute
>> ;
>> arguments: '(' argument? ( ',' argument )* ')' ;
>> argument: expression
>> | IDCON '=' expression ;
>> expression: ( IDCON | NATCON | TEXT | SYMBOLCON
>> | '[' expression? ( ',' expression )* ']' // List
>> | '{' keyValuePair? ( ',' keyValuePair )* '}' // Record
>> ) ( '+' expression | '.' IDCON )* ;
>> keyValuePair: IDCON ':' expression ;
>> regularStatement:    'echo' expression ';' ;
>> embedding: PRETEXT embed textTail ;
>> embed: markup* expression ;
>> textTail: POSTTEXT | MIDTEXT embed textTail ;
>>
>> 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