Main Page   Modules   Namespace List   Class Hierarchy   Compound List   File List   Compound Members   File Members   Related Pages  

operators.h

Go to the documentation of this file.
00001 // ----------------------------------------------------------------------
00002 //
00003 //  C-Breeze
00004 //  C Compiler Framework
00005 // 
00006 //  Copyright (c) 2000 University of Texas at Austin
00007 // 
00008 //  Samuel Z. Guyer
00009 //  Daniel A. Jimenez
00010 //  Calvin Lin
00011 // 
00012 //  Permission is hereby granted, free of charge, to any person
00013 //  obtaining a copy of this software and associated documentation
00014 //  files (the "Software"), to deal in the Software without
00015 //  restriction, including without limitation the rights to use, copy,
00016 //  modify, merge, publish, distribute, sublicense, and/or sell copies
00017 //  of the Software, and to permit persons to whom the Software is
00018 //  furnished to do so, subject to the following conditions:
00019 //  
00020 //  The above copyright notice and this permission notice shall be
00021 //  included in all copies or substantial portions of the Software.
00022 //  
00023 //  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00024 //  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00025 //  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00026 //  NONINFRINGEMENT.  IN NO EVENT SHALL THE UNIVERSITY OF TEXAS AT
00027 //  AUSTIN BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
00028 //  IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
00029 //  OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00030 //  THE SOFTWARE.
00031 //
00032 //  We acknowledge the C-to-C Translator from MIT Laboratory for
00033 //  Computer Science for inspiring parts of the C-Breeze design.
00034 //
00035 // ----------------------------------------------------------------------
00036 
00037 #ifndef CBZ_OPERATORS_H
00038 #define CBZ_OPERATORS_H
00039 
00040 // The following values have been defined so that we can separate the
00041 // representation of the AST from any particular aspect of the parser.
00042 
00043 class Operator
00044 {
00045 public:
00046 
00047   typedef enum {SIZEOF = 300, // Make sure we are past regular chars
00048                 UPLUS,
00049                 UMINUS,
00050                 INDIR,
00051                 ADDRESS,
00052                 POSTINC,
00053                 POSTDEC,
00054                 PREINC,
00055                 PREDEC,
00056                 ARROW,
00057                 ICR,
00058                 DECR,
00059                 LS,
00060                 RS,
00061                 LE,
00062                 GE,
00063                 EQ,
00064                 NE,
00065                 ANDAND,
00066                 OROR,
00067                 MULTassign,
00068                 DIVassign,
00069                 MODassign,
00070                 PLUSassign,
00071                 MINUSassign,
00072                 LSassign,
00073                 RSassign,
00074                 ANDassign,
00075                 ERassign,
00076                 ORassign,
00077                 Index
00078   } OperatorID;
00079 
00080 private:
00081 
00082   unsigned int _id;
00083   int _unary_prec;
00084   int _binary_prec;
00085   bool _is_left_assoc;
00086   string _name;
00087   string _print;
00088 
00089 public:
00090 
00091   Operator(unsigned int id, const char * print, const char * name, 
00092            int unary_prec, int binary_prec,
00093            bool is_left_assoc = true)
00094     : _id(id),
00095       _unary_prec(unary_prec),
00096       _binary_prec(binary_prec),
00097       _is_left_assoc(true),
00098       _name(string(name)),
00099       _print(string(print))
00100   {}
00101 
00102   inline unsigned int id() const { return _id; }
00103   inline int unary_prec() const { return _unary_prec; }
00104   inline int binary_prec() const { return _binary_prec; }
00105   inline bool is_left_assoc() const { return _is_left_assoc; }
00106   inline const string & name() const { return _name; }
00107   inline const string & print() const { return _print; }
00108 
00109   bool is_assignment() const;
00110   bool is_arithmetic() const;
00111   bool is_comparison() const;
00112 };  
00113 
00114 typedef map<unsigned int, Operator *, less< unsigned int > > operator_map;
00115 
00116 class Operators
00117 {
00118 public:
00119 
00120   static operator_map table;
00121 
00122   static void init();
00123 };
00124 
00125 
00126 #endif // CBZ_OPERATORS_H

Generated on Thu Jan 10 12:06:20 2002 for C-Breeze by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001