[antlr-interest] Re: Match the End of File

thrutchy eric_mahurin at yahoo.com
Sat Jul 17 13:12:16 PDT 2004


--- In antlr-interest at yahoogroups.com, "xcolwell" <xcolwell at y...> wrote:
> Hi,
> 
> I am trying to write a lexer to match a multi-line comment.
> However, there is a catch. If a "comment" is started but never
> terminated, I want to  match it also. For example, I would like to
> match
> 
> /*  comment */EOF
> 
> as well as 
> 
> /*  comment   EOF
> 
> under the same token. I am just getting into ANTLR, so I used Mr.
> Parr's Java grammar from antlr.org as a starting point. It appears
> that '\uFFFF' is the EOF character used internally. I can't find a
> nice identifier in the documents. The modification I would like to
> make is below.
> 
> ML_COMMENT
> 	:
> 			options {
> 				generateAmbigWarnings=false;
> 			}
> 		:
> 			{ LA(2)!='/' }? '*'
> 		|	'\r' '\n'		{newline();}
> 		|	'\r'			{newline();}
> 		|	'\n'			{newline();}
> 		|	~('*'|'\n'|'\r')

Try changing the above line to:

 		|	~('*'|'\n'|'\r'|'\uFFFF')

> 		)*
> 		("*/" | '\uFFFF' )
> 	;
> 
> 
> But unfortunately this does not work. Is there an EOF identifier I am
> missing? How would one write a rule for what I am trying to do?
> 
> Best Regards,
> 
> Brien

Another solution would be greedy=false:

"/*" ( options{greedy=false;} :
  : '\r' '\n' {newline();}
  | '\r'      {newline();}
  | '\n'      {newline();}
  | ~('\r'|'\n')
  )*
("*/" | '\uFFFF' )

Be warned that I have tried these.




 
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