Related articles |
---|
Flex and EOF matteo.corti@gmail.com (Matteo Corti) (2006-04-08) |
Re: Flex and EOF cdodd@acm.org (Chris Dodd) (2006-04-09) |
Re: Flex and EOF rsc@swtch.com (Russ Cox) (2006-04-09) |
Re: Flex and EOF tmk@netvision.net.il (Michael Tiomkin) (2006-04-09) |
Re: Flex and EOF DrDiettrich@compuserve.de (Hans-Peter Diettrich) (2006-04-10) |
Re: Flex and EOF matteo.corti@gmail.com (Matteo Corti) (2006-04-12) |
Re: Flex and EOF idbaxter@semdesigns.com (Ira Baxter) (2006-04-12) |
From: | Matteo Corti <matteo.corti@gmail.com> |
Newsgroups: | comp.compilers |
Date: | 12 Apr 2006 22:44:31 -0400 |
Organization: | ETH Zurich |
References: | 06-04-035 06-04-073 |
Keywords: | lex |
Posted-Date: | 12 Apr 2006 22:44:31 EDT |
On 2006-04-10, Hans-Peter Diettrich <DrDiettrich@compuserve.de> wrote:
> Matteo Corti wrote:
>
>> I have a rule in my lexer to skip shell-like comments:
>>
>> #.*$ /* skip comments */
>>
>> which works just fine if there is \n at the end of the line.
>> If the comment is in the last line wich is terminated by EOF the rule
>> obviously fails.
>
> This is one of the reasons why e.g. C syntax (of the preprocessor)
> requires that source files must end with a newline character. Do you
> have full control of your syntax?
Thanks for the many suggestions. I don't have *any* control on the
syntax :-) but in any case I realized that instead of being stubborn
and insist on finding a regexp I could be less lazy and write a couple
of lines of code:
"#" { /* ignore comment */
register int c;
while ((c = input()) != '\n' &&
(c != '\r') &&
(c != EOF))
;
}
I could also, as suggested by someone, use a new state but since I already
have a couple of them for other reasons this would complicate the scanner
readability.
In any case thanks for the useful suggestions.
Matteo
--
Matteo Corti
ETH Zurich
Return to the
comp.compilers page.
Search the
comp.compilers archives again.