Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

expression.h

Go to the documentation of this file.
00001 // expression.h
00002 //
00003 // Copyright (C) 2002, Chris Laurel <claurel@shatters.net>
00004 //
00005 // This program is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU General Public License
00007 // as published by the Free Software Foundation; either version 2
00008 // of the License, or (at your option) any later version.
00009 
00010 #ifndef CELSCRIPT_EXPRESSION_H_
00011 #define CELSCRIPT_EXPRESSION_H_
00012 
00013 #include <celscript/celx.h>
00014 #include <vector>
00015 #include <celscript/value.h>
00016 #include <celscript/execution.h>
00017 
00018 
00019 namespace celx
00020 {
00021 
00022 class Expression
00023 {
00024  public:
00025     Expression();
00026     virtual ~Expression();
00027     virtual bool isLValue() const;
00028 
00029     virtual Value eval(ExecutionContext&) = 0;
00030     virtual Value* leval(ExecutionContext&);
00031 };
00032 
00033 
00034 class BinaryExpression : public Expression
00035 {
00036  public:
00037     enum Operator
00038     {
00039         Add           =  0,
00040         Subtract      =  1,
00041         Multiply      =  2,
00042         Divide        =  3,
00043         Equal         =  4,
00044         NotEqual      =  5,
00045         Lesser        =  6,
00046         Greater       =  7,
00047         LesserEqual   =  8,
00048         GreaterEqual  =  9,
00049         InvalidOp     = 10,
00050         OperatorCount = 11,
00051     };
00052 
00053     BinaryExpression(Operator, Expression*, Expression*);
00054     virtual ~BinaryExpression();
00055     virtual Value eval(ExecutionContext&);
00056 
00057  private:
00058     const Operator op;
00059     Expression* left;
00060     Expression* right;
00061 };
00062 
00063 
00064 class UnaryExpression : public Expression
00065 {
00066  public:
00067     enum Operator {
00068         Negate        = 0,
00069         LogicalNot    = 1,
00070         InvalidOp     = 2,
00071         OperatorCount = 3,
00072     };
00073 
00074     UnaryExpression(Operator, Expression*);
00075     virtual ~UnaryExpression();
00076     virtual Value eval(ExecutionContext&);
00077 
00078  private:
00079     const Operator op;
00080     Expression* expr;
00081 };
00082 
00083 
00084 class ConstantExpression : public Expression
00085 {
00086  public:
00087     ConstantExpression(const Value&);
00088     virtual ~ConstantExpression();
00089     virtual Value eval(ExecutionContext&);
00090 
00091  private:
00092     Value value;
00093 };
00094 
00095 
00096 class IdentifierExpression : public Expression
00097 {
00098  public:
00099     IdentifierExpression(const std::string&);
00100     virtual ~IdentifierExpression();
00101     virtual bool isLValue() const;
00102     virtual Value eval(ExecutionContext&);
00103     virtual Value* leval(ExecutionContext&);
00104 
00105  private:
00106     const std::string name;
00107     int stackDepth;
00108 };
00109 
00110 
00111 class AssignmentExpression : public Expression
00112 {
00113  public:
00114     AssignmentExpression(Expression*, Expression*);
00115     virtual ~AssignmentExpression();
00116     virtual bool isLValue() const;
00117     virtual Value eval(ExecutionContext&);
00118     virtual Value* leval(ExecutionContext&);
00119 
00120  private:
00121     Expression* left;
00122     Expression* right;
00123 };
00124 
00125 
00126 class FunctionCallExpression : public Expression
00127 {
00128  public:
00129     FunctionCallExpression(Expression*);
00130     ~FunctionCallExpression();
00131     virtual Value eval(ExecutionContext&);
00132 
00133     void addArgument(Expression*);
00134 
00135  private:
00136     Expression* func;
00137     std::vector<Expression*> arguments;
00138 };
00139 
00140 } // namespace celx
00141 
00142 #endif // CELSCRIPT_EXPRESSION_H_

Generated on Sat Jan 14 22:30:32 2006 for Celestia by  doxygen 1.4.1