xref: /386bsd/usr/src/usr.bin/awk/scan.h (revision a2142627)
1 
2 /********************************************
3 scan.h
4 copyright 1991, Michael D. Brennan
5 
6 This is a source file for mawk, an implementation of
7 the AWK programming language.
8 
9 Mawk is distributed without warranty under the terms of
10 the GNU General Public License, version 2, 1991.
11 ********************************************/
12 
13 
14 /* $Log: scan.h,v $
15  * Revision 5.1  1991/12/05  07:59:33  brennan
16  * 1.1 pre-release
17  *
18 */
19 
20 
21 /* scan.h  */
22 
23 #ifndef  SCAN_H_INCLUDED
24 #define  SCAN_H_INCLUDED   1
25 
26 #include <stdio.h>
27 
28 #ifndef   MAKESCAN
29 #include  "symtype.h"
30 #include  "parse.h"
31 #endif
32 
33 
34 extern  char scan_code[256] ;
35 
36 /*  the scan codes to compactify the main switch */
37 
38 #define  SC_SPACE               1
39 #define  SC_NL                  2
40 #define  SC_SEMI_COLON          3
41 #define  SC_FAKE_SEMI_COLON     4
42 #define  SC_LBRACE              5
43 #define  SC_RBRACE              6
44 #define  SC_QMARK               7
45 #define  SC_COLON               8
46 #define  SC_OR                  9
47 #define  SC_AND                10
48 #define  SC_PLUS               11
49 #define  SC_MINUS              12
50 #define  SC_MUL                13
51 #define  SC_DIV                14
52 #define  SC_MOD                15
53 #define  SC_POW                16
54 #define  SC_LPAREN             17
55 #define  SC_RPAREN             18
56 #define  SC_LBOX               19
57 #define  SC_RBOX               20
58 #define  SC_IDCHAR             21
59 #define  SC_DIGIT              22
60 #define  SC_DQUOTE             23
61 #define  SC_ESCAPE             24
62 #define  SC_COMMENT            25
63 #define  SC_EQUAL              26
64 #define  SC_NOT                27
65 #define  SC_LT                 28
66 #define  SC_GT                 29
67 #define  SC_COMMA              30
68 #define  SC_DOT                31
69 #define  SC_MATCH              32
70 #define  SC_DOLLAR             33
71 #define  SC_UNEXPECTED         34
72 
73 #ifndef  MAKESCAN
74 
75 /* global functions in scan.c */
76 
77 void  PROTO(scan_init,  (char *) ) ;
78 void  PROTO(scan_cleanup, (void) ) ;
79 void  PROTO(eat_nl, (void) ) ;
80 int   PROTO(yylex, (void) ) ;
81 
82 
83 extern  YYSTYPE  yylval ;
84 
85 #define  ct_ret(x)  return current_token = (x)
86 
87 #define  next() (*buffp ? *buffp++ : slow_next())
88 #define  un_next()  buffp--
89 
90 #define  test1_ret(c,x,d)  if ( next() == (c) ) ct_ret(x) ;\
91                            else { un_next() ; ct_ret(d) ; }
92 
93 #define  test2_ret(c1,x1,c2,x2,d)   switch( next() )\
94                                    { case c1: ct_ret(x1) ;\
95                                      case c2: ct_ret(x2) ;\
96                                      default: un_next() ;\
97                                               ct_ret(d) ; }
98 #endif  /* ! MAKESCAN  */
99 #endif
100