| /* lex.h -- Public #include File (module.h template V1.0) |
| Copyright (C) 1995 Free Software Foundation, Inc. |
| Contributed by James Craig Burley. |
| |
| This file is part of GNU Fortran. |
| |
| GNU Fortran 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. |
| |
| GNU Fortran 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 GNU Fortran; see the file COPYING. If not, write to |
| the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA |
| 02111-1307, USA. |
| |
| Owning Modules: |
| lex.c |
| |
| Modifications: |
| 22-Aug-89 JCB 1.1 |
| Change for new ffewhere interface. |
| */ |
| |
| /* Allow multiple inclusion to work. */ |
| |
| #ifndef GCC_F_LEX_H |
| #define GCC_F_LEX_H |
| |
| /* Simple definitions and enumerations. */ |
| |
| typedef enum |
| { |
| FFELEX_typeNONE, |
| FFELEX_typeCOMMENT, |
| FFELEX_typeEOS, |
| FFELEX_typeEOF, |
| FFELEX_typeERROR, |
| FFELEX_typeRAW, |
| FFELEX_typeQUOTE, |
| FFELEX_typeDOLLAR, |
| FFELEX_typeHASH, |
| FFELEX_typePERCENT, |
| FFELEX_typeAMPERSAND, |
| FFELEX_typeAPOSTROPHE, |
| FFELEX_typeOPEN_PAREN, |
| FFELEX_typeCLOSE_PAREN, |
| FFELEX_typeASTERISK, |
| FFELEX_typePLUS, |
| FFELEX_typeMINUS, |
| FFELEX_typePERIOD, |
| FFELEX_typeSLASH, |
| FFELEX_typeNUMBER, /* Grep: [0-9][0-9]*. */ |
| FFELEX_typeOPEN_ANGLE, |
| FFELEX_typeEQUALS, |
| FFELEX_typeCLOSE_ANGLE, |
| FFELEX_typeNAME, /* Grep: [A-Za-z][A-Za-z0-9_]*. */ |
| FFELEX_typeCOMMA, |
| FFELEX_typePOWER, /* "**". */ |
| FFELEX_typeCONCAT, /* "//". */ |
| FFELEX_typeDEBUG, |
| FFELEX_typeNAMES, /* Same as FFELEX_typeNAME in initial |
| context. */ |
| FFELEX_typeHOLLERITH, /* <text> part of <nn>H<text>. */ |
| FFELEX_typeCHARACTER, /* <text> part of '<text>' or "<text>". */ |
| FFELEX_typeCOLON, |
| FFELEX_typeSEMICOLON, |
| FFELEX_typeUNDERSCORE, |
| FFELEX_typeQUESTION, |
| FFELEX_typeOPEN_ARRAY, /* "(/". */ |
| FFELEX_typeCLOSE_ARRAY, /* "/)". */ |
| FFELEX_typeCOLONCOLON, /* "::". */ |
| FFELEX_typeREL_LE, /* "<=". */ |
| FFELEX_typeREL_NE, /* "<>". */ |
| FFELEX_typeREL_EQ, /* "==". */ |
| FFELEX_typePOINTS, /* "=>". */ |
| FFELEX_typeREL_GE, /* ">=". */ |
| FFELEX_type |
| } ffelexType; |
| |
| /* Typedefs. */ |
| |
| typedef struct _lextoken_ *ffelexToken; |
| typedef void *lex_sigh_; |
| typedef lex_sigh_ (*lex_sigh__) (ffelexToken); |
| typedef lex_sigh__ (*ffelexHandler) (ffelexToken); |
| |
| /* Include files needed by this one. */ |
| |
| #include "top.h" |
| #include "where.h" |
| |
| /* Structure definitions. */ |
| |
| struct _lextoken_ |
| { |
| long int id_; /* DEBUG ONLY. */ |
| ffeTokenLength size; |
| ffeTokenLength length; |
| unsigned short uses; |
| char *text; |
| ffelexType type; |
| ffewhereLine where_line; |
| ffewhereColumn where_col; |
| ffewhereLine currentnames_line; /* For tracking NAMES tokens. */ |
| ffewhereColumn currentnames_col; /* For tracking NAMES tokens. */ |
| ffewhereTrack wheretrack; /* For tracking NAMES tokens. */ |
| }; |
| |
| /* Global objects accessed by users of this module. */ |
| |
| |
| /* Declare functions with prototypes. */ |
| |
| void ffelex_display_token (ffelexToken t); |
| bool ffelex_expecting_character (void); |
| ffelexHandler ffelex_file_fixed (ffewhereFile wf, FILE *f); |
| ffelexHandler ffelex_file_free (ffewhereFile wf, FILE *f); |
| void ffelex_hash_kludge (FILE *f); |
| void ffelex_init_1 (void); |
| bool ffelex_is_names_expected (void); |
| char *ffelex_line (void); |
| ffewhereColumnNumber ffelex_line_length (void); |
| ffewhereLineNumber ffelex_line_number (void); |
| void ffelex_set_expecting_hollerith (long length, char which, |
| ffewhereLine line, |
| ffewhereColumn column); |
| void ffelex_set_handler (ffelexHandler first); |
| void ffelex_set_hexnum (bool on); |
| void ffelex_set_include (ffewhereFile wf, bool free_form, FILE *fi); |
| void ffelex_set_names (bool on); |
| void ffelex_set_names_pure (bool on); |
| ffelexHandler ffelex_splice_tokens (ffelexHandler first, ffelexToken master, |
| ffeTokenLength start); |
| ffelexHandler ffelex_swallow_tokens (ffelexToken t, ffelexHandler handler); |
| ffelexToken ffelex_token_dollar_from_names (ffelexToken t, |
| ffeTokenLength start); |
| void ffelex_token_kill (ffelexToken t); |
| ffelexToken ffelex_token_name_from_names (ffelexToken t, |
| ffeTokenLength start, |
| ffeTokenLength len); |
| ffelexToken ffelex_token_names_from_names (ffelexToken t, |
| ffeTokenLength start, |
| ffeTokenLength len); |
| ffelexToken ffelex_token_new (void); |
| ffelexToken ffelex_token_new_character (const char *s, ffewhereLine l, |
| ffewhereColumn c); |
| ffelexToken ffelex_token_new_eof (void); |
| ffelexToken ffelex_token_new_name (const char *s, ffewhereLine l, |
| ffewhereColumn c); |
| ffelexToken ffelex_token_new_names (const char *s, ffewhereLine l, |
| ffewhereColumn c); |
| ffelexToken ffelex_token_new_number (const char *s, ffewhereLine l, |
| ffewhereColumn c); |
| ffelexToken ffelex_token_new_simple_ (ffelexType type, ffewhereLine l, |
| ffewhereColumn c); |
| ffelexToken ffelex_token_number_from_names (ffelexToken t, |
| ffeTokenLength start); |
| ffelexToken ffelex_token_uscore_from_names (ffelexToken t, |
| ffeTokenLength start); |
| ffelexToken ffelex_token_use (ffelexToken t); |
| |
| /* Define macros. */ |
| |
| #define ffelex_init_0() |
| #define ffelex_init_2() |
| #define ffelex_init_3() |
| #define ffelex_init_4() |
| #define ffelex_is_firstnamechar(c) ISIDST (c) |
| #define ffelex_terminate_0() |
| #define ffelex_terminate_1() |
| #define ffelex_terminate_2() |
| #define ffelex_terminate_3() |
| #define ffelex_terminate_4() |
| #define ffelex_token_length(t) ((t)->length) |
| #define ffelex_token_new_eos(l,c) \ |
| ffelex_token_new_simple_ (FFELEX_typeEOS, (l), (c)) |
| #define ffelex_token_new_period(l,c) \ |
| ffelex_token_new_simple_ (FFELEX_typePERIOD, (l), (c)) |
| #define ffelex_token_strcmp(t1,t2) strcmp ((t1)->text, (t2)->text) |
| #define ffelex_token_text(t) ((t)->text) |
| #define ffelex_token_type(t) ((t)->type) |
| #define ffelex_token_where_column(t) ((t)->where_col) |
| #define ffelex_token_where_filename(t) \ |
| ffewhere_line_filename ((t)->where_line) |
| #define ffelex_token_where_filelinenum(t) \ |
| ffewhere_line_filelinenum((t)->where_line) |
| #define ffelex_token_where_line(t) ((t)->where_line) |
| #define ffelex_token_where_line_number(t) \ |
| ffewhere_line_number ((t)->where_line) |
| #define ffelex_token_wheretrack(t) ((t)->wheretrack) |
| |
| /* End of #include file. */ |
| |
| #endif /* ! GCC_F_LEX_H */ |