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