-/*
- * Copyright (C) 1994, Index Data I/S
- * All rights reserved.
- * Sebastian Hammer, Adam Dickmeiss
- *
- * $Log: lexer.c,v $
- * Revision 1.1 1994-09-26 10:16:55 adam
- * First version of dfa module in alex. This version uses yacc to parse
- * regular expressions. This should be hand-made instead.
- *
- *
- * Adam Dickmeiss. 1992-1993
- * This module is actually very old...
- */
+/* $Id: lexer.c,v 1.12 2002-08-02 19:26:55 adam Exp $
+ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
+ Index Data Aps
+
+This file is part of the Zebra server.
+
+Zebra is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free
+Software Foundation; either version 2, or (at your option) any later
+version.
+
+Zebra is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or
+FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+for more details.
+
+You should have received a copy of the GNU General Public License
+along with Zebra; see the file LICENSE.zebra. If not, write to the
+Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA.
+*/
+
+
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <stdarg.h>
-#include <util.h>
+#include <zebrautl.h>
#include <dfa.h>
#include "imalloc.h"
#include "lexer.h"
static char *prog;
-void error( const char *format, ... )
+void error (const char *format, ...)
{
va_list argptr;
- va_start( argptr, format );
- fprintf( stderr, "%s error: ", prog );
- (void) vfprintf( stderr, format, argptr );
- putc( '\n', stderr );
- exit( 1 );
+ va_start (argptr, format);
+ fprintf (stderr, "%s error: ", prog);
+ (void) vfprintf (stderr, format, argptr);
+ putc ('\n', stderr);
+ exit (1);
}
-#ifdef YACC
-extern int yydebug;
-#else
-extern int alexdebug;
-#endif
int ccluse = 0;
-static int alex_options (int argc, char **argv);
-
-static int alex_options (int argc, char **argv)
+static int lexer_options (int argc, char **argv)
{
- while( --argc > 0 )
- if( **++argv == '-' )
- while( *++*argv )
+ while (--argc > 0)
+ if (**++argv == '-')
+ while (*++*argv)
{
- switch( **argv )
+ switch (**argv)
{
-#ifdef __STDC__
case 'V':
- fprintf( stderr, "%s: %s %s\n", prog, __DATE__, __TIME__ );
+ fprintf (stderr, "%s: %s %s\n", prog, __DATE__, __TIME__);
continue;
-#endif
- case 'v':
+ case 's':
dfa_verbose = 1;
continue;
- case 't':
-#ifdef YACC
- yydebug = 1;
-#else
- alexdebug = 1;
-#endif
- continue;
case 'c':
ccluse = 1;
continue;
case 'd':
- switch( *++*argv )
+ switch (*++*argv)
{
case 's':
debug_dfa_tran = 1;
}
continue;
default:
- fprintf( stderr, "%s: unknown option `-%s'\n", prog, *argv );
+ fprintf (stderr, "%s: unknown option `-%s'\n",
+ prog, *argv);
return 1;
}
break;
return 0;
}
-int main (int argc, char **argv )
+int main (int argc, char **argv)
{
int i, no = 0;
- DFA *dfa;
- DFA_states *dfas;
+ struct DFA *dfa;
prog = *argv;
-#ifdef YACC
- yydebug = 0;
-#else
- alexdebug = 0;
-#endif
- i = alex_options( argc, argv );
- if( i )
+ dfa = dfa_init ();
+ i = lexer_options (argc, argv);
+ if (i)
return i;
- if( argc < 2 )
+ if (argc < 2)
{
- fprintf( stderr, "%s: usage %s -cVvt -d[stf]\n", prog, prog );
+ fprintf (stderr, "usage\n %s [-c] [-V] [-s] [-t] [-d[stf]] file\n",
+ prog);
return 1;
}
- else while( --argc > 0 )
- if( **++argv != '-' && **argv )
- {
- ++no;
- i = read_file( *argv, &dfa );
- if( i )
- return i;
- dfas = mk_dfas( dfa, 2000 );
- rm_dfa( &dfa );
- rm_dfas( &dfas );
- }
-#ifdef MEMDEBUG
+ else while (--argc > 0)
+ if (**++argv != '-' && **argv)
+ {
+ ++no;
+
+ i = read_file (*argv, dfa);
+ if (i)
+ return i;
+ dfa_mkstate (dfa);
+
+#if MEMDEBUG
+ imemstat();
+#endif
+ }
+ dfa_delete (&dfa);
+#if MEMDEBUG
imemstat();
#endif
- if( !no )
+ if (!no)
{
- fprintf( stderr, "%s: no files specified\n", prog );
+ fprintf (stderr, "%s: no files specified\n", prog);
return 2;
}
return 0;