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 / expr.h < prev    next >
C/C++ Source or Header  |  1996-09-28  |  8KB  |  190 lines

  1. /* expr.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.       expr.c
  23.  
  24.    Modifications:
  25. */
  26.  
  27. /* Allow multiple inclusion to work. */
  28.  
  29. #ifndef _H_f_expr
  30. #define _H_f_expr
  31.  
  32. /* Simple definitions and enumerations. */
  33.  
  34. typedef enum
  35.   {
  36.     FFEEXPR_contextLET,
  37.     FFEEXPR_contextASSIGN,
  38.     FFEEXPR_contextIOLIST,
  39.     FFEEXPR_contextPARAMETER,
  40.     FFEEXPR_contextSUBROUTINEREF,
  41.     FFEEXPR_contextDATA,
  42.     FFEEXPR_contextIF,
  43.     FFEEXPR_contextARITHIF,
  44.     FFEEXPR_contextDO,
  45.     FFEEXPR_contextDOWHILE,
  46.     FFEEXPR_contextFORMAT,
  47.     FFEEXPR_contextAGOTO,
  48.     FFEEXPR_contextCGOTO,
  49.     FFEEXPR_contextCHARACTERSIZE,
  50.     FFEEXPR_contextEQUIVALENCE,
  51.     FFEEXPR_contextSTOP,
  52.     FFEEXPR_contextRETURN,
  53.     FFEEXPR_contextSFUNCDEF,
  54.     FFEEXPR_contextINCLUDE,
  55.     FFEEXPR_contextWHERE,
  56.     FFEEXPR_contextSELECTCASE,
  57.     FFEEXPR_contextCASE,
  58.     FFEEXPR_contextDIMLIST,
  59.     FFEEXPR_contextDIMLISTCOMMON,    /* Dim list in COMMON stmt. */
  60.     FFEEXPR_contextFILEASSOC,    /* ASSOCIATEVARIABLE=. */
  61.     FFEEXPR_contextFILEINT,    /* IOSTAT=. */
  62.     FFEEXPR_contextFILEDFINT,    /* NEXTREC=. */
  63.     FFEEXPR_contextFILELOG,    /* NAMED=. */
  64.     FFEEXPR_contextFILENUM,    /* Numerical expression. */
  65.     FFEEXPR_contextFILECHAR,    /* Character expression. */
  66.     FFEEXPR_contextFILENUMCHAR,    /* READ KEYxyz=. */
  67.     FFEEXPR_contextFILEDFCHAR,    /* Default kind character expression. */
  68.     FFEEXPR_contextFILEKEY,    /* OPEN KEY=. */
  69.     FFEEXPR_contextFILEEXTFUNC,    /* USEROPEN=. */
  70.     FFEEXPR_contextFILEUNIT,    /* READ/WRITE UNIT=. */
  71.     FFEEXPR_contextFILEUNIT_DF,    /* DEFINE FILE unit (no "(" after it). */
  72.     FFEEXPR_contextFILEFORMATNML,    /* [FMT=] or [NML=]. */
  73.     FFEEXPR_contextFILEFORMAT,    /* FMT=. */
  74.     FFEEXPR_contextFILENAMELIST,/* NML=. */
  75.     FFEEXPR_contextFILENUMAMBIG,/* BACKSPACE, ENDFILE, REWIND, UNLOCK...
  76.                    where at e.g. BACKSPACE(, if COMMA seen
  77.                    before ), it is ok. */
  78.     FFEEXPR_contextFILEUNITAMBIG,    /* READ(, if COMMA seen before ), ok. */
  79.     FFEEXPR_contextFILEVXTCODE,    /* ENCODE/DECODE third arg (scalar/array). */
  80.     FFEEXPR_contextALLOCATE,    /* ALLOCATE objects (weird). */
  81.     FFEEXPR_contextDEALLOCATE,    /* DEALLOCATE objects (weird). */
  82.     FFEEXPR_contextHEAPSTAT,    /* ALLOCATE/DEALLOCATE STAT= variable. */
  83.     FFEEXPR_contextKINDTYPE,    /* KIND=. */
  84.     FFEEXPR_contextINITVAL,    /* R426 =initialization-expr. */
  85.     FFEEXPR_contextNULLIFY,    /* Pointer names only (F90) or pointers. */
  86.     FFEEXPR_contextIOLISTDF,    /* IOLIST w/internal file (V112 9-14 30,31). */
  87.     FFEEXPR_contextINDEX_,    /* Element dimension or substring value. */
  88.     FFEEXPR_contextEQVINDEX_,    /* EQUIVALENCE element dimension. */
  89.     FFEEXPR_contextDATAIMPDOINDEX_,    /* INDEX in DATAIMPDO context. */
  90.     FFEEXPR_contextIMPDOITEM_,
  91.     FFEEXPR_contextIMPDOITEMDF_,/* to ...ITEM_ as IOLISTDF is to IOLIST. */
  92.     FFEEXPR_contextIMPDOCTRL_,
  93.     FFEEXPR_contextDATAIMPDOITEM_,
  94.     FFEEXPR_contextDATAIMPDOCTRL_,
  95.     FFEEXPR_contextLOC_,
  96.     FFEEXPR_contextACTUALARG_,    /* Actual arg to function or subroutine;
  97.                    turns into ACTUALARGEXPR_ if tokens not
  98.                    NAME (CLOSE_PAREN/COMMA) or PERCENT.... */
  99.     FFEEXPR_contextACTUALARGEXPR_,    /* Like LET but disallow CHAR*(*)
  100.                        concats. */
  101.     FFEEXPR_contextINDEXORACTUALARG_,    /* "CHARACTER FOO; PRINT *,FOO(?". */
  102.     FFEEXPR_contextINDEXORACTUALARGEXPR_,    /* ? not NAME
  103.                            (CLOSE_PAREN/COMMA). */
  104.     FFEEXPR_contextSFUNCDEFINDEX_,    /* INDEX_ within stmt-func def. */
  105.     FFEEXPR_contextSFUNCDEFACTUALARG_,
  106.     FFEEXPR_contextSFUNCDEFACTUALARGEXPR_,
  107.     FFEEXPR_contextSFUNCDEFINDEXORACTUALARG_,
  108.     FFEEXPR_contextSFUNCDEFINDEXORACTUALARGEXPR_,
  109.     FFEEXPR_contextPAREN_,    /* Rhs paren except in LET context. */
  110.     FFEEXPR_contextPARENFILENUM_,    /* Either PAREN or FILENUM context. */
  111.     FFEEXPR_contextPARENFILEUNIT_,    /* Either PAREN or FILEUNIT context. */
  112.     FFEEXPR_context
  113.   } ffeexprContext;
  114.  
  115. /* Typedefs. */
  116.  
  117.  
  118. /* Include files needed by this one. */
  119.  
  120. #include "bld.h"
  121. #include "lex.h"
  122. #include "malloc.h"
  123.  
  124. /* Structure definitions. */
  125.  
  126. typedef ffelexHandler (*ffeexprCallback) (ffelexToken ft, ffebld expr,
  127.                       ffelexToken t);
  128.  
  129. /* Global objects accessed by users of this module. */
  130.  
  131.  
  132. /* Declare functions with prototypes. */
  133.  
  134. ffebld ffeexpr_collapse_convert (ffebld expr, ffelexToken t);
  135. ffebld ffeexpr_collapse_paren (ffebld expr, ffelexToken t);
  136. ffebld ffeexpr_collapse_uplus (ffebld expr, ffelexToken t);
  137. ffebld ffeexpr_collapse_uminus (ffebld expr, ffelexToken t);
  138. ffebld ffeexpr_collapse_not (ffebld expr, ffelexToken t);
  139. ffebld ffeexpr_collapse_add (ffebld expr, ffelexToken t);
  140. ffebld ffeexpr_collapse_subtract (ffebld expr, ffelexToken t);
  141. ffebld ffeexpr_collapse_multiply (ffebld expr, ffelexToken t);
  142. ffebld ffeexpr_collapse_divide (ffebld expr, ffelexToken t);
  143. ffebld ffeexpr_collapse_power (ffebld expr, ffelexToken t);
  144. ffebld ffeexpr_collapse_concatenate (ffebld expr, ffelexToken t);
  145. ffebld ffeexpr_collapse_lt (ffebld expr, ffelexToken t);
  146. ffebld ffeexpr_collapse_le (ffebld expr, ffelexToken t);
  147. ffebld ffeexpr_collapse_eq (ffebld expr, ffelexToken t);
  148. ffebld ffeexpr_collapse_ne (ffebld expr, ffelexToken t);
  149. ffebld ffeexpr_collapse_gt (ffebld expr, ffelexToken t);
  150. ffebld ffeexpr_collapse_ge (ffebld expr, ffelexToken t);
  151. ffebld ffeexpr_collapse_and (ffebld expr, ffelexToken t);
  152. ffebld ffeexpr_collapse_or (ffebld expr, ffelexToken t);
  153. ffebld ffeexpr_collapse_xor (ffebld expr, ffelexToken t);
  154. ffebld ffeexpr_collapse_eqv (ffebld expr, ffelexToken t);
  155. ffebld ffeexpr_collapse_neqv (ffebld expr, ffelexToken t);
  156. ffebld ffeexpr_collapse_symter (ffebld expr, ffelexToken t);
  157. ffebld ffeexpr_collapse_funcref (ffebld expr, ffelexToken t);
  158. ffebld ffeexpr_collapse_arrayref (ffebld expr, ffelexToken t);
  159. ffebld ffeexpr_collapse_substr (ffebld expr, ffelexToken t);
  160. ffebld ffeexpr_convert (ffebld source, ffelexToken source_token,
  161.         ffelexToken dest_token, ffeinfoBasictype bt, ffeinfoKindtype kt,
  162.             ffeinfoRank rk, ffetargetCharacterSize sz,
  163.             ffeexprContext context);
  164. ffebld ffeexpr_convert_expr (ffebld source, ffelexToken source_token,
  165.                  ffebld dest, ffelexToken dest_token,
  166.                  ffeexprContext context);
  167. ffebld ffeexpr_convert_to_sym (ffebld source, ffelexToken source_token,
  168.                    ffesymbol dest, ffelexToken dest_token);
  169. void ffeexpr_init_2 (void);
  170. ffelexHandler ffeexpr_rhs (mallocPool pool, ffeexprContext context,
  171.                ffeexprCallback callback);
  172. ffelexHandler ffeexpr_lhs (mallocPool pool, ffeexprContext context,
  173.                ffeexprCallback callback);
  174. void ffeexpr_terminate_2 (void);
  175.  
  176. /* Define macros. */
  177.  
  178. #define ffeexpr_init_0()
  179. #define ffeexpr_init_1()
  180. #define ffeexpr_init_3()
  181. #define ffeexpr_init_4()
  182. #define ffeexpr_terminate_0()
  183. #define ffeexpr_terminate_1()
  184. #define ffeexpr_terminate_3()
  185. #define ffeexpr_terminate_4()
  186.  
  187. /* End of #include file. */
  188.  
  189. #endif
  190.