Added -ansi to CFLAGS.
[idzebra-moved-to-github.git] / dfa / lexer.c
1 /*
2  * Copyright (C) 1994, Index Data I/S 
3  * All rights reserved.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: lexer.c,v $
7  * Revision 1.5  1995-01-24 16:00:22  adam
8  * Added -ansi to CFLAGS.
9  * Some changes to the dfa module.
10  *
11  * Revision 1.4  1994/10/04  17:46:44  adam
12  * Function options now returns arg with error option.
13  *
14  * Revision 1.3  1994/10/03  17:22:19  adam
15  * Optimization of grepper.
16  *
17  * Revision 1.2  1994/09/27  16:31:20  adam
18  * First version of grepper: grep with error correction.
19  *
20  * Revision 1.1  1994/09/26  10:16:55  adam
21  * First version of dfa module in alex. This version uses yacc to parse
22  * regular expressions. This should be hand-made instead.
23  *
24  *
25  * Adam Dickmeiss.      1992-1993
26  * This module is actually very old...
27  */
28 #include <stdio.h>
29 #include <assert.h>
30
31 #include <stdlib.h>
32 #include <string.h>
33 #include <stdarg.h>
34
35 #include <util.h>
36 #include <dfa.h>
37 #include "imalloc.h"
38 #include "lexer.h"
39
40 static char *prog;
41
42
43 void error (const char *format, ...)
44 {
45     va_list argptr;
46     va_start (argptr, format);
47     fprintf (stderr, "%s error: ", prog);
48     (void) vfprintf (stderr, format, argptr);
49     putc ('\n', stderr);
50     exit (1);
51 }
52
53 #ifdef YACC
54 extern int yydebug;
55 #else
56 extern int alexdebug;
57 #endif
58 int ccluse = 0;
59
60 static int lexer_options (int argc, char **argv)
61 {
62     while (--argc > 0)
63         if (**++argv == '-')
64             while (*++*argv)
65             {
66                 switch (**argv)
67                 {
68                 case 'V':
69                     fprintf (stderr, "%s: %s %s\n", prog, __DATE__, __TIME__);
70                     continue;
71                 case 's':
72                     dfa_verbose = 1;
73                     continue;
74                 case 't':
75 #ifdef YACC
76                     yydebug = 1;
77 #else
78                     alexdebug = 1;
79 #endif
80                     continue;
81                 case 'c':
82                     ccluse = 1;
83                     continue;
84                 case 'd':
85                     switch (*++*argv)
86                     {
87                     case 's':
88                         debug_dfa_tran = 1;
89                         break;
90                     case 't':
91                         debug_dfa_trav = 1;
92                         break;
93                     case 'f':
94                         debug_dfa_followpos = 1;
95                         break;
96                     default:
97                         --*argv;
98                         debug_dfa_tran = 1;
99                         debug_dfa_followpos = 1;
100                         debug_dfa_trav = 1;
101                     }
102                     continue;
103                 default:
104                     fprintf (stderr, "%s: unknown option `-%s'\n",
105                              prog, *argv);
106                     return 1;
107                 }
108                 break;
109             }
110     return 0;
111 }
112
113 int main (int argc, char **argv)
114 {
115     int i, no = 0;
116     struct DFA *dfa;
117
118     prog = *argv;
119 #ifdef YACC
120     yydebug = 0;
121 #else
122     alexdebug = 0;
123 #endif
124     dfa = dfa_init ();
125     i = lexer_options (argc, argv);
126     if (i)
127         return i;
128
129     if (argc < 2)
130     {
131         fprintf (stderr, "usage\n  %s [-c] [-V] [-s] [-t] [-d[stf]] file\n",
132                  prog);
133         return 1;
134     }
135     else while (--argc > 0)
136         if (**++argv != '-' && **argv)
137         {
138             ++no;
139             
140             i = read_file (*argv, dfa);
141             if (i)
142                 return i;
143             dfa_mkstate (dfa);
144         }
145     dfa_delete (&dfa);
146 #ifdef MEMDEBUG
147     imemstat();
148 #endif
149     if (!no)
150     {
151         fprintf (stderr, "%s: no files specified\n", prog);
152         return 2;
153     }
154     return 0;
155 }
156