=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/compile_et/Attic/et_lex.lex.l,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** src/usr.bin/compile_et/Attic/et_lex.lex.l 1998/05/13 17:54:22 1.2 --- src/usr.bin/compile_et/Attic/et_lex.lex.l 2000/02/19 12:07:19 1.3 *************** *** 1,31 **** %{ ! unsigned lineno = 1; ! %} ! PC [^\"] ! AN [A-Z_a-z0-9] ! %% ! error_table return ERROR_TABLE; ! et return ERROR_TABLE; ! error_code return ERROR_CODE_ENTRY; ! ec return ERROR_CODE_ENTRY; ! end return END; ! [\t ] ; ! \n ++lineno; ! \"{PC}*\" { register char *p; yylval.dynstr = ds(yytext+1); ! if ((p = strrchr(yylval.dynstr, '"')) != NULL) *p = '\0'; ! return QUOTED_STRING; ! } ! {AN}* { yylval.dynstr = ds(yytext); return STRING; } ! #.*\n ++lineno; ! . { return (*yytext); } %% ! #ifndef lint ! static char rcsid_et_lex_lex_l[] = "$Id: et_lex.lex.l,v 1.2 1998/05/13 17:54:22 art Exp $"; #endif --- 1,127 ---- %{ ! /* ! * Copyright (c) 1998 Kungliga Tekniska Högskolan ! * (Royal Institute of Technology, Stockholm, Sweden). ! * All rights reserved. ! * ! * Redistribution and use in source and binary forms, with or without ! * modification, are permitted provided that the following conditions ! * are met: ! * ! * 1. Redistributions of source code must retain the above copyright ! * notice, this list of conditions and the following disclaimer. ! * ! * 2. Redistributions in binary form must reproduce the above copyright ! * notice, this list of conditions and the following disclaimer in the ! * documentation and/or other materials provided with the distribution. ! * ! * 3. All advertising materials mentioning features or use of this software ! * must display the following acknowledgement: ! * This product includes software developed by Kungliga Tekniska ! * Högskolan and its contributors. ! * ! * 4. Neither the name of the Institute nor the names of its contributors ! * may be used to endorse or promote products derived from this software ! * without specific prior written permission. ! * ! * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND ! * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ! * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ! * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE ! * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ! * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS ! * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) ! * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT ! * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY ! * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ! * SUCH DAMAGE. ! */ ! /* ! * This is to handle the definition of this symbol in some AIX ! * headers, which will conflict with the definition that lex will ! * generate for it. It's only a problem for AIX lex. ! */ ! #undef ECHO ! #include "compile_et.h" ! #include "error_table.h" ! /* RCSID("$KTH: lex.l,v 1.4 1998/11/20 05:58:52 assar Exp $"); */ ! static unsigned lineno = 1; ! void error_message(char *, ...); ! int getstring(void); ! %} ! %% ! et { return ET; } ! error_table { return ET; } ! ec { return EC; } ! error_code { return EC; } ! prefix { return PREFIX; } ! index { return INDEX; } ! id { return ID; } ! end { return END; } ! [0-9]+ { yylval.number = atoi(yytext); return NUMBER; } ! #[^\n]* ; ! [ \t] ; ! \n { lineno++; } ! \" { return getstring(); } ! [a-zA-Z0-9_]+ { yylval.string = strdup(yytext); return STRING; } ! . { return *yytext; } ! %% ! ! #ifndef yywrap /* XXX */ ! int ! yywrap () ! { ! return 1; ! } #endif + + int + getstring(void) + { + char x[128]; + int i = 0; + int c; + int quote = 0; + while((c = input()) != EOF){ + if(quote) { + x[i++] = c; + quote = 0; + continue; + } + if(c == '\n'){ + error_message("unterminated string"); + lineno++; + break; + } + if(c == '\\'){ + quote++; + continue; + } + if(c == '\"') + break; + x[i++] = c; + } + x[i] = '\0'; + yylval.string = strdup(x); + return STRING; + } + + void + error_message (char *format, ...) + { + va_list args; + + va_start (args, format); + fprintf (stderr, "%s:%d:", filename, lineno); + vfprintf (stderr, format, args); + va_end (args); + numerror++; + }