Related articles |
---|
lex: is NLSTATE always part of the language ? Ralf.Reche@hamburg.sc.philips.com (Ralf Reche (CAT SDC Hamburg)) (1997-10-21) |
Re: lex: is NLSTATE always part of the language ? vern@daffy.ee.lbl.gov (1997-10-26) |
From: | Ralf Reche (CAT SDC Hamburg) <Ralf.Reche@hamburg.sc.philips.com> |
Newsgroups: | comp.compilers |
Date: | 21 Oct 1997 21:27:31 -0400 |
Organization: | Philips Semiconductors RHW |
Keywords: | lex, question |
Hi all,
I'm have written a lex program that BEGINs a new %State when a character ':'
appears at the beginning of the line. This character is then to be reused,
so I call yyless(0). But, also the 'beginning of line' state is to be reused,
and the standard documentation for lex does not provide a function for that.
I had a look at the C code produced by lex (on HP-UX and SunOS) and found a
definition for NLSTATE, that did just what I needed:
# define NLSTATE yyprevious=YYNEWLINE
When I use this in my lex program, everything is as I want it:
<INITIAL>^: { yyless(0); NLSTATE; BEGIN stateI; }
<stateI>^: { ... }
Now my question is whether this code is portable, i.e. do ALL (or
most) lex compilers define NLSTATE with this meaning? Or, is there a
more standard solution to my problem that I didn't see ? (there is
more than one line starting with ':')
Thanks for any help, Ralf.
* Philips Semiconductors RHW Tel +49 (40) 5613-2963
* 21147 Hamburg, Germany Fax +49 (40) 5613-3313
* mailTo:Ralf.Reche@hamburg.sc.philips.com
[Flex, which is the version of lex most people use, doesn't have that. You
already have a start state telling you where you are, so just use that to
control the patterns you want. You may want two states, one for stateI at
the beginning of a line and the other for stateI elsewhere. -John]
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.