home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Atari / Gnu / gassrc04.zoo / expr.h < prev    next >
C/C++ Source or Header  |  1991-01-24  |  2KB  |  70 lines

  1. /* expr.h -> header file for expr.c
  2.    Copyright (C) 1987 Free Software Foundation, Inc.
  3.  
  4. This file is part of GAS, the GNU Assembler.
  5.  
  6. GAS is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 1, or (at your option)
  9. any later version.
  10.  
  11. GAS is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GAS; see the file COPYING.  If not, write to
  18. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. /*
  21.  * Abbreviations (mnemonics).
  22.  *
  23.  *    O    operator
  24.  *    Q    quantity,  operand
  25.  *    X    eXpression
  26.  */
  27.  
  28. /*
  29.  * By popular demand, we define a struct to represent an expression.
  30.  * This will no doubt mutate as expressions become baroque.
  31.  *
  32.  * Currently, we support expressions like "foo-bar+42".
  33.  * In other words we permit a (possibly undefined) minuend, a
  34.  * (possibly undefined) subtrahend and an (absolute) augend.
  35.  * RMS says this is so we can have 1-pass assembly for any compiler
  36.  * emmissions, and a 'case' statement might emit 'undefined1 - undefined2'.
  37.  *
  38.  * To simplify table-driven dispatch, we also have a "segment" for the
  39.  * entire expression. That way we don't require complex reasoning about
  40.  * whether particular components are defined; and we can change component
  41.  * semantics without re-working all the dispatch tables in the assembler.
  42.  * In other words the "type" of an expression is its segment.
  43.  */
  44.  
  45. typedef struct
  46. {
  47.     symbolS *X_add_symbol;        /* foo */
  48.     symbolS *X_subtract_symbol;    /* bar */
  49.     long int X_add_number;        /* 42.    Must be signed. */
  50.     segT    X_seg;            /* What segment (expr type)? */
  51. }
  52. expressionS;
  53.  
  54.                 /* result should be type (expressionS *). */
  55. #define expression(result) expr(0,result)
  56.  
  57.                 /* If an expression is SEG_BIG, look here */
  58.                 /* for its value. These common data may */
  59.                 /* be clobbered whenever expr() is called. */
  60. extern FLONUM_TYPE generic_floating_point_number; /* Flonums returned here. */
  61.                 /* Enough to hold most precise flonum. */
  62. extern LITTLENUM_TYPE generic_bignum []; /* Bignums returned here. */
  63. #define SIZE_OF_LARGE_NUMBER (20)    /* Number of littlenums in above. */
  64.  
  65.  
  66. segT        expr();
  67. char        get_symbol_end();
  68.  
  69. /* end: expr.h */
  70.