HELP needed from an experience lex-er

peters at cubsvax.UUCP peters at cubsvax.UUCP
Fri Jul 6 10:05:22 AEST 1984


'Fraid I jumped in over my head on this one... anyone with experience
(or even just plain advice!!) is welcome to reply.

I hacked up lex.yy.c by changing the definitions of "input()" and "output(c)",
as well as the function definiton of yylex(), so that yylex now has the
form yylex(string), where string gets copied into extern char *instr.
Output is placed in extern char *outstr, which is returned.  The net 
effect is that yylex() can now be called as a subroutine from another
function, and returns outstr to that function.  Fine and dandy.

This works wonderfully on the first call...  but on subsequent calls
the input string never gets parsed;  the right part
of yylook() is never entered.  Apparently, something
is done to lex.yy.c's external variables during parsing, and something
needs to be re-initialized before the second call will work properly.  If
you know what it is, please let me know!  (In the meantime, I'll be
hacking away... I never really wanted to know how lex does its thing, and
if you tell me how to solve this problem, I won't have to....)

If you've read this far, you might like to know that my input() looks
like lex's, except getc is replaced with a #defined "sgetc" ("string-
getc," dig it?), which returns the next character in instr, increments
an index to instr, and returns EOF if '\0' is encountered.  (Then on each
call, instr is re-initialized to the string passed to yylex.)

{philabs,cmcl2!rocky2}!cubsvax!peters            Dr. Peter S. Shenkin 
Dept of Biol. Sci.;  Columbia Univ.;  New York, N. Y.  10027;  212-280-5517



More information about the Comp.unix.wizards mailing list