[BACK]Return to et_lex.lex.l CVS log [TXT][DIR] Up to [local] / src / usr.bin / compile_et

Diff for /src/usr.bin/compile_et/Attic/et_lex.lex.l between version 1.2 and 1.3

version 1.2, 1998/05/13 17:54:22 version 1.3, 2000/02/19 12:07:19
Line 1 
Line 1 
 %{  %{
   unsigned lineno = 1;  /*
 %}   * 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.
    */
   
 PC      [^\"]  /*
 AN      [A-Z_a-z0-9]   * 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.
    */
   
 error_table     return ERROR_TABLE;  #undef ECHO
 et              return ERROR_TABLE;  
 error_code      return ERROR_CODE_ENTRY;  
 ec              return ERROR_CODE_ENTRY;  
 end             return END;  
   
 [\t ]           ;  #include "compile_et.h"
 \n              ++lineno;  #include "error_table.h"
   
 \"{PC}*\"       { register char *p; yylval.dynstr = ds(yytext+1);  /* RCSID("$KTH: lex.l,v 1.4 1998/11/20 05:58:52 assar Exp $"); */
                   if ((p = strrchr(yylval.dynstr, '"')) != NULL) *p = '\0';  
                   return QUOTED_STRING;  
                 }  
   
 {AN}*   { yylval.dynstr = ds(yytext); return STRING; }  static unsigned lineno = 1;
   void error_message(char *, ...);
   int getstring(void);
   
 #.*\n           ++lineno;  %}
   
 .               { return (*yytext); }  
 %%  %%
 #ifndef lint  et                      { return ET; }
 static char rcsid_et_lex_lex_l[] = "$Id$";  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  #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++;
   }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3