[antlr-interest] Gramar without semicolon

jbb at acm.org jbb at acm.org
Wed Jul 28 11:43:43 PDT 2004


Greetings!

You wrote:
.....snip....
>I make a simple case with only two instructions an if
>and an assignament:
>
>instructions: (instruction)+;
>instruction: inst_if | inst_assig;
>inst_if: IF expr THEN (NL)* instructions (ELSE (NL)*
>instructions)? ENDIF ((NL)+ |SEMICOLON instruction);
>inst_assig: IDENT ASSIG expr ((NL)+ |SEMICOLON
>instruction);
>
>This I think that works quite well and recognizes
>thinks like
>
>IF expr THEN inst1;inst2
>ELSE  inst1
>END IF
>
>But it can't recognize
>IF expr THEN inst1 ELSE inst2 END IF
>
>And I don't know how to manage this, I think that I've
>to use semantic predicates but I am a little confused.

The (NL)+ phrase near the end of both the inst_if and the inst_assig
rules mean that a NL is always required to terminate an instruction
phrase.

But you want the NL to be optional sometimes (e.g. at the end of the
then phrase and at the end of the else phrase).

Here is a grammar fragment that makes the NL optional - and maybe
making it optional in too many places in the rest of your grammar...




program :
	instruction_block EOF
    ;

instruction_block :
	single_line ( (NL)+ ( instruction_block )? )?
    ;

single_line :
	instruction ( SEMICOLON instruction )*
    ;

instruction :
	inst_if | inst_assig
    ;

inst_if :
	IF expr THEN (NL)* instruction_block
	( ELSE (NL)* instruction_block )?
	ENDIF
    ;

inst_assig :
	IDENT ASSIG expr
    ;




Hope this helps....
	John B. Brodie (jbb at acm.org)


 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/antlr-interest/

<*> To unsubscribe from this group, send an email to:
    antlr-interest-unsubscribe at yahoogroups.com

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/
 



More information about the antlr-interest mailing list