[antlr-interest] Recursive rule invocation

Martijn Reuvers martijn.reuvers at gmail.com
Sat Aug 29 05:20:24 PDT 2009


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