home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / g77-0.5.15-src.tgz / tar.out / fsf / g77 / f / lex.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  6KB  |  199 lines

  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 (burley@gnu.ai.mit.edu).
  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, 675 Mass Ave, Cambridge, MA 02139, USA.
  20.  
  21.    Owning Modules:
  22.       lex.c
  23.  
  24.    Modifications:
  25.       22-Aug-89     JCB  1.1
  26.      Change for new ffewhere interface.
  27. */
  28.  
  29. /* Allow multiple inclusion to work. */
  30.  
  31. #ifndef _H_f_lex
  32. #define _H_f_lex
  33.  
  34. /* Simple definitions and enumerations. */
  35.  
  36. typedef enum
  37.   {
  38.     FFELEX_typeNONE,
  39.     FFELEX_typeCOMMENT,
  40.     FFELEX_typeEOS,
  41.     FFELEX_typeEOF,
  42.     FFELEX_typeERROR,
  43.     FFELEX_typeRAW,
  44.     FFELEX_typeQUOTE,
  45.     FFELEX_typeDOLLAR,
  46.     FFELEX_typePERCENT,
  47.     FFELEX_typeAMPERSAND,
  48.     FFELEX_typeAPOSTROPHE,
  49.     FFELEX_typeOPEN_PAREN,
  50.     FFELEX_typeCLOSE_PAREN,
  51.     FFELEX_typeASTERISK,
  52.     FFELEX_typePLUS,
  53.     FFELEX_typeMINUS,
  54.     FFELEX_typePERIOD,
  55.     FFELEX_typeSLASH,
  56.     FFELEX_typeNUMBER,        /* Grep: [0-9][0-9]*. */
  57.     FFELEX_typeOPEN_ANGLE,
  58.     FFELEX_typeEQUALS,
  59.     FFELEX_typeCLOSE_ANGLE,
  60.     FFELEX_typeNAME,        /* Grep: [A-Za-z][A-Za-z0-9_]*. */
  61.     FFELEX_typeCOMMA,
  62.     FFELEX_typePOWER,        /* "**". */
  63.     FFELEX_typeCONCAT,        /* "//". */
  64.     FFELEX_typeDEBUG,
  65.     FFELEX_typeNAMES,        /* Same as FFELEX_typeNAME in initial
  66.                    context. */
  67.     FFELEX_typeHOLLERITH,    /* <text> part of <nn>H<text>. */
  68.     FFELEX_typeCHARACTER,    /* <text> part of '<text>' or "<text>". */
  69.     FFELEX_typeCOLON,
  70.     FFELEX_typeSEMICOLON,
  71.     FFELEX_typeUNDERSCORE,
  72.     FFELEX_typeQUESTION,
  73.     FFELEX_typeOPEN_ARRAY,    /* "(/". */
  74.     FFELEX_typeCLOSE_ARRAY,    /* "/)". */
  75.     FFELEX_typeCOLONCOLON,    /* "::". */
  76.     FFELEX_typeREL_LE,        /* "<=". */
  77.     FFELEX_typeREL_NE,        /* "<>". */
  78.     FFELEX_typeREL_EQ,        /* "==". */
  79.     FFELEX_typePOINTS,        /* "=>". */
  80.     FFELEX_typeREL_GE,        /* ">=". */
  81.     FFELEX_type
  82.   } ffelexType;
  83.  
  84. /* Typedefs. */
  85.  
  86. typedef struct _lextoken_ *ffelexToken;
  87. typedef void *lex_sigh_;
  88. typedef lex_sigh_ (*lex_sigh__) (ffelexToken);
  89. typedef lex_sigh__ (*ffelexHandler) (ffelexToken);
  90.  
  91. /* Include files needed by this one. */
  92.  
  93. #include <ctype.h>
  94. #include "top.h"
  95. #include "where.h"
  96.  
  97. /* Structure definitions. */
  98.  
  99. struct _lextoken_
  100.   {
  101.     long int id_;        /* DEBUG ONLY. */
  102.     ffeTokenLength size;
  103.     ffeTokenLength length;
  104.     unsigned short uses;
  105.     char *text;
  106.     ffelexType type;
  107.     ffewhereLine where_line;
  108.     ffewhereColumn where_col;
  109.     ffewhereLine currentnames_line;    /* For tracking NAMES tokens. */
  110.     ffewhereColumn currentnames_col;    /* For tracking NAMES tokens. */
  111.     ffewhereTrack wheretrack;    /* For tracking NAMES tokens. */
  112.   };
  113.  
  114. /* Global objects accessed by users of this module. */
  115.  
  116.  
  117. /* Declare functions with prototypes. */
  118.  
  119. bool ffelex_expecting_character (void);
  120. ffelexHandler ffelex_file_fixed (ffewhereFile wf, FILE *f);
  121. ffelexHandler ffelex_file_free (ffewhereFile wf, FILE *f);
  122. void ffelex_init_1 (void);
  123. bool ffelex_is_names_expected (void);
  124. char *ffelex_line (void);
  125. ffewhereColumnNumber ffelex_line_length (void);
  126. ffewhereLineNumber ffelex_line_number (void);
  127. void ffelex_set_expecting_hollerith (long length, char which,
  128.                      ffewhereLine line,
  129.                      ffewhereColumn column);
  130. void ffelex_set_handler (ffelexHandler first);
  131. void ffelex_set_hexnum (bool on);
  132. void ffelex_set_include (ffewhereFile wf, bool free_form, FILE *fi);
  133. void ffelex_set_names (bool on);
  134. void ffelex_set_names_pure (bool on);
  135. ffelexHandler ffelex_splice_tokens (ffelexHandler first, ffelexToken master,
  136.                     ffeTokenLength start);
  137. ffelexHandler ffelex_swallow_tokens (ffelexToken t, ffelexHandler handler);
  138. ffelexToken ffelex_token_dollar_from_names (ffelexToken t,
  139.                         ffeTokenLength start);
  140. void ffelex_token_kill (ffelexToken t);
  141. ffelexToken ffelex_token_name_from_names (ffelexToken t,
  142.                       ffeTokenLength start,
  143.                       ffeTokenLength len);
  144. ffelexToken ffelex_token_names_from_names (ffelexToken t,
  145.                        ffeTokenLength start,
  146.                        ffeTokenLength len);
  147. ffelexToken ffelex_token_new (void);
  148. ffelexToken ffelex_token_new_character (char *s, ffewhereLine l,
  149.                     ffewhereColumn c);
  150. ffelexToken ffelex_token_new_eof (void);
  151. ffelexToken ffelex_token_new_name (char *s, ffewhereLine l,
  152.                    ffewhereColumn c);
  153. ffelexToken ffelex_token_new_names (char *s, ffewhereLine l,
  154.                     ffewhereColumn c);
  155. ffelexToken ffelex_token_new_number (char *s, ffewhereLine l,
  156.                      ffewhereColumn c);
  157. ffelexToken ffelex_token_new_simple_ (ffelexType type, ffewhereLine l,
  158.                       ffewhereColumn c);
  159. ffelexToken ffelex_token_number_from_names (ffelexToken t,
  160.                         ffeTokenLength start);
  161. ffelexToken ffelex_token_uscore_from_names (ffelexToken t,
  162.                         ffeTokenLength start);
  163. ffelexToken ffelex_token_use (ffelexToken t);
  164.  
  165. /* Define macros. */
  166.  
  167. #define ffelex_init_0()
  168. #define ffelex_init_2()
  169. #define ffelex_init_3()
  170. #define ffelex_init_4()
  171. #define ffelex_is_firstnamechar(c) \
  172.   (isalpha ((c)) || ((c) == '_'))
  173. #define ffelex_terminate_0()
  174. #define ffelex_terminate_1()
  175. #define ffelex_terminate_2()
  176. #define ffelex_terminate_3()
  177. #define ffelex_terminate_4()
  178. #define ffelex_token_length(t) ((t)->length)
  179. #define ffelex_token_new_eos(l,c) \
  180.   ffelex_token_new_simple_ (FFELEX_typeEOS, (l), (c))
  181. #define ffelex_token_new_period(l,c) \
  182.   ffelex_token_new_simple_ (FFELEX_typePERIOD, (l), (c))
  183. #define ffelex_token_strcmp(t1,t2) strcmp ((t1)->text, (t2)->text)
  184. #define ffelex_token_text(t) ((t)->text)
  185. #define ffelex_token_type(t) ((t)->type)
  186. #define ffelex_token_where_column(t) ((t)->where_col)
  187. #define ffelex_token_where_filename(t) \
  188.   ffewhere_line_filename ((t)->where_line)
  189. #define ffelex_token_where_filelinenum(t) \
  190.   ffewhere_line_filelinenum((t)->where_line)
  191. #define ffelex_token_where_line(t) ((t)->where_line)
  192. #define ffelex_token_where_line_number(t) \
  193.   ffewhere_line_number ((t)->where_line)
  194. #define ffelex_token_wheretrack(t) ((t)->wheretrack)
  195.  
  196. /* End of #include file. */
  197.  
  198. #endif
  199.