Merge from vendor branch GCC:
[dragonfly.git] / contrib / gcc-3.4 / gcc / f / lex.h
1 /* lex.h -- Public #include File (module.h template V1.0)
2    Copyright (C) 1995 Free Software Foundation, Inc.
3    Contributed by James Craig Burley.
4
5 This file is part of GNU Fortran.
6
7 GNU Fortran is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
11
12 GNU Fortran is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GNU Fortran; see the file COPYING.  If not, write to
19 the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.
21
22    Owning Modules:
23       lex.c
24
25    Modifications:
26       22-Aug-89  JCB  1.1
27          Change for new ffewhere interface.
28 */
29
30 /* Allow multiple inclusion to work. */
31
32 #ifndef GCC_F_LEX_H
33 #define GCC_F_LEX_H
34
35 /* Simple definitions and enumerations. */
36
37 typedef enum
38   {
39     FFELEX_typeNONE,
40     FFELEX_typeCOMMENT,
41     FFELEX_typeEOS,
42     FFELEX_typeEOF,
43     FFELEX_typeERROR,
44     FFELEX_typeRAW,
45     FFELEX_typeQUOTE,
46     FFELEX_typeDOLLAR,
47     FFELEX_typeHASH,
48     FFELEX_typePERCENT,
49     FFELEX_typeAMPERSAND,
50     FFELEX_typeAPOSTROPHE,
51     FFELEX_typeOPEN_PAREN,
52     FFELEX_typeCLOSE_PAREN,
53     FFELEX_typeASTERISK,
54     FFELEX_typePLUS,
55     FFELEX_typeMINUS,
56     FFELEX_typePERIOD,
57     FFELEX_typeSLASH,
58     FFELEX_typeNUMBER,          /* Grep: [0-9][0-9]*. */
59     FFELEX_typeOPEN_ANGLE,
60     FFELEX_typeEQUALS,
61     FFELEX_typeCLOSE_ANGLE,
62     FFELEX_typeNAME,            /* Grep: [A-Za-z][A-Za-z0-9_]*. */
63     FFELEX_typeCOMMA,
64     FFELEX_typePOWER,           /* "**". */
65     FFELEX_typeCONCAT,          /* "//". */
66     FFELEX_typeDEBUG,
67     FFELEX_typeNAMES,           /* Same as FFELEX_typeNAME in initial
68                                    context. */
69     FFELEX_typeHOLLERITH,       /* <text> part of <nn>H<text>. */
70     FFELEX_typeCHARACTER,       /* <text> part of '<text>' or "<text>". */
71     FFELEX_typeCOLON,
72     FFELEX_typeSEMICOLON,
73     FFELEX_typeUNDERSCORE,
74     FFELEX_typeQUESTION,
75     FFELEX_typeOPEN_ARRAY,      /* "(/". */
76     FFELEX_typeCLOSE_ARRAY,     /* "/)". */
77     FFELEX_typeCOLONCOLON,      /* "::". */
78     FFELEX_typeREL_LE,          /* "<=". */
79     FFELEX_typeREL_NE,          /* "<>". */
80     FFELEX_typeREL_EQ,          /* "==". */
81     FFELEX_typePOINTS,          /* "=>". */
82     FFELEX_typeREL_GE,          /* ">=". */
83     FFELEX_type
84   } ffelexType;
85
86 /* Typedefs. */
87
88 typedef struct _lextoken_ *ffelexToken;
89 typedef void *lex_sigh_;
90 typedef lex_sigh_ (*lex_sigh__) (ffelexToken);
91 typedef lex_sigh__ (*ffelexHandler) (ffelexToken);
92
93 /* Include files needed by this one. */
94
95 #include "top.h"
96 #include "where.h"
97
98 /* Structure definitions. */
99
100 struct _lextoken_
101   {
102     long int id_;               /* DEBUG ONLY. */
103     ffeTokenLength size;
104     ffeTokenLength length;
105     unsigned short uses;
106     char *text;
107     ffelexType type;
108     ffewhereLine where_line;
109     ffewhereColumn where_col;
110     ffewhereLine currentnames_line;     /* For tracking NAMES tokens. */
111     ffewhereColumn currentnames_col;    /* For tracking NAMES tokens. */
112     ffewhereTrack wheretrack;   /* For tracking NAMES tokens. */
113   };
114
115 /* Global objects accessed by users of this module. */
116
117
118 /* Declare functions with prototypes. */
119
120 void ffelex_display_token (ffelexToken t);
121 bool ffelex_expecting_character (void);
122 ffelexHandler ffelex_file_fixed (ffewhereFile wf, FILE *f);
123 ffelexHandler ffelex_file_free (ffewhereFile wf, FILE *f);
124 void ffelex_hash_kludge (FILE *f);
125 void ffelex_init_1 (void);
126 bool ffelex_is_names_expected (void);
127 char *ffelex_line (void);
128 ffewhereColumnNumber ffelex_line_length (void);
129 ffewhereLineNumber ffelex_line_number (void);
130 void ffelex_set_expecting_hollerith (long length, char which,
131                                      ffewhereLine line,
132                                      ffewhereColumn column);
133 void ffelex_set_handler (ffelexHandler first);
134 void ffelex_set_hexnum (bool on);
135 void ffelex_set_include (ffewhereFile wf, bool free_form, FILE *fi);
136 void ffelex_set_names (bool on);
137 void ffelex_set_names_pure (bool on);
138 ffelexHandler ffelex_splice_tokens (ffelexHandler first, ffelexToken master,
139                                     ffeTokenLength start);
140 ffelexHandler ffelex_swallow_tokens (ffelexToken t, ffelexHandler handler);
141 ffelexToken ffelex_token_dollar_from_names (ffelexToken t,
142                                             ffeTokenLength start);
143 void ffelex_token_kill (ffelexToken t);
144 ffelexToken ffelex_token_name_from_names (ffelexToken t,
145                                           ffeTokenLength start,
146                                           ffeTokenLength len);
147 ffelexToken ffelex_token_names_from_names (ffelexToken t,
148                                            ffeTokenLength start,
149                                            ffeTokenLength len);
150 ffelexToken ffelex_token_new (void);
151 ffelexToken ffelex_token_new_character (const char *s, ffewhereLine l,
152                                         ffewhereColumn c);
153 ffelexToken ffelex_token_new_eof (void);
154 ffelexToken ffelex_token_new_name (const char *s, ffewhereLine l,
155                                    ffewhereColumn c);
156 ffelexToken ffelex_token_new_names (const char *s, ffewhereLine l,
157                                     ffewhereColumn c);
158 ffelexToken ffelex_token_new_number (const char *s, ffewhereLine l,
159                                      ffewhereColumn c);
160 ffelexToken ffelex_token_new_simple_ (ffelexType type, ffewhereLine l,
161                                       ffewhereColumn c);
162 ffelexToken ffelex_token_number_from_names (ffelexToken t,
163                                             ffeTokenLength start);
164 ffelexToken ffelex_token_uscore_from_names (ffelexToken t,
165                                             ffeTokenLength start);
166 ffelexToken ffelex_token_use (ffelexToken t);
167
168 /* Define macros. */
169
170 #define ffelex_init_0()
171 #define ffelex_init_2()
172 #define ffelex_init_3()
173 #define ffelex_init_4()
174 #define ffelex_is_firstnamechar(c) ISIDST (c)
175 #define ffelex_terminate_0()
176 #define ffelex_terminate_1()
177 #define ffelex_terminate_2()
178 #define ffelex_terminate_3()
179 #define ffelex_terminate_4()
180 #define ffelex_token_length(t) ((t)->length)
181 #define ffelex_token_new_eos(l,c) \
182   ffelex_token_new_simple_ (FFELEX_typeEOS, (l), (c))
183 #define ffelex_token_new_period(l,c) \
184   ffelex_token_new_simple_ (FFELEX_typePERIOD, (l), (c))
185 #define ffelex_token_strcmp(t1,t2) strcmp ((t1)->text, (t2)->text)
186 #define ffelex_token_text(t) ((t)->text)
187 #define ffelex_token_type(t) ((t)->type)
188 #define ffelex_token_where_column(t) ((t)->where_col)
189 #define ffelex_token_where_filename(t) \
190   ffewhere_line_filename ((t)->where_line)
191 #define ffelex_token_where_filelinenum(t) \
192   ffewhere_line_filelinenum((t)->where_line)
193 #define ffelex_token_where_line(t) ((t)->where_line)
194 #define ffelex_token_where_line_number(t) \
195   ffewhere_line_number ((t)->where_line)
196 #define ffelex_token_wheretrack(t) ((t)->wheretrack)
197
198 /* End of #include file. */
199
200 #endif /* ! GCC_F_LEX_H */