[comp.unix.wizards] LEX Questions

dave@andromeda.rutgers.edu (Dave Bloom) (11/13/87)

Two Questions concerning the use of lex:

	(1) What is it PRECISELY that yymore() does? Does it:
		   continue reading characters in the current rule until
		   it finds a match, and then keeps the whole string in
		   yytext? (This is how I see it, but the documentation
		   is not very specific.) If it doesn't find a match,
		   does the WHOLE STRING get checked in later rules?

	(2) From what I understand, you're always in START condition 0
		   unless you hit a BEGIN Q. (Where Q is a previously
		   defined start condition) You finish the action where
		   you hit the BEGIN Q statement and then start on a new
		   token, but now all the patterns starting with a <Q>
		   are available. Is this true? Is it true that a pattern
		   that starts with <Q> can never be checked unless you
		   hit a BEGIN Q in some previous action?

I ask these questions because I am trying to recognize strings as anything
between two " symbols including \"  . This is what I have that doesn't work:

\"[^"]*\"	{ if(yytext[yyleng-2] == '\\') {
			BEGIN Q; yymore();
			}
		  else
			return(STRING);
		}
<Q>[^"]*\"	{ if(yytext[yyleng-2] == '\\') {
			BEGIN Q; yymore();
			}
		  else
			return(STRING);
		}

I am more concerned whith what I'm doing wrong than how to do it right.
If you have any ideas, please reply by email. (I rarely read this group.)

Thanx.

       seismo \  pyramid \                          Dave Bloom
ihnp4!packard  >!rutgers  >!andromeda!dave          Office: (201) 648-5083
      allegra /    hoxna /