4.3BSD/usr/contrib/X/uwm/lex.l
%{
/************************************************************************
* *
* Copyright (c) 1986 by *
* Digital Equipment Corporation, Maynard, MA *
* All Rights Reserved. *
* *
* Permission to use, copy, modify, and distribute this software *
* and its documentation is hereby granted only to licensees of *
* The Regents of the University of California pursuant to their *
* license agreement for the Berkeley Software Distribution *
* provided that the following appears on all copies. *
* *
* "LICENSED FROM DIGITAL EQUIPMENT CORPORATION *
* COPYRIGHT (C) 1986 *
* DIGITAL EQUIPMENT CORPORATION *
* MAYNARD, MA *
* ALL RIGHTS RESERVED. *
* *
* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT *
* NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL *
* EQUIPMENT CORPORATION. DIGITAL MAKES NO REPRESENTATIONS *
* ABOUT SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE. IT IS *
* SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. *
* *
* IF THE UNIVERSITY OF CALIFORNIA OR ITS LICENSEES MODIFY *
* THE SOFTWARE IN A MANNER CREATING DERIVATIVE COPYRIGHT *
* RIGHTS APPROPRIATE COPYRIGHT LEGENDS MAY BE PLACED ON THE *
* DERIVATIVE WORK IN ADDITION TO THAT SET FORTH ABOVE." *
* *
************************************************************************/
/*
* MODIFICATION HISTORY
*
* 000 -- M. Gancarz, DEC Ultrix Engineering Group
*/
#ifndef lint
static char *sccsid = "@(#)lex.l 3.8 1/24/86";
#endif
#include "y.tab.h"
#include "uwm.h"
char *dequote();
char *stash();
%}
W [ \t]+
%%
#.*\n { return(COMMENT); } /* Comments. */
{W} { ; } /* Whitespace. */
[^ \"\t\n#=\^\!\|\(\)\{\}:;]+ { yylval.sval=stash(yytext);return(STRING); }
\"[^\"\n]*\" { yylval.sval=stash(dequote(yytext));
return(STRING); }
\n { return(NL); }
. { return(*yytext); }
%%
/*
* Remove the quotes enclosing a quoted string.
*/
char *
dequote(s)
char *s;
{
char *p;
++s;
p = rindex(s, '"');
*p = '\0';
return(s);
}
/*
* Save string away in memory and return a pointer to it. If
* no space could be found, quit with a fatal error.
*/
char *stash(s)
char *s;
{
char *ptr;
char *malloc();
ptr = malloc(strlen(s) + 1);
if (ptr == NULL) {
Error("out of space");
}
return(strcpy(ptr, s));
}