+struct LitExpr\r
+{\r
+ LitType type;\r
+\r
+ int _int;\r
+ double _decimal;\r
+ std::string _string;\r
+ bool _bool;\r
+};\r
+\r
+struct ParenExpr\r
+{\r
+ std::shared_ptr<Expr> expr;\r
+};\r
+\r
+struct DotExpr\r
+{\r
+ bool isPointer;\r
+ std::shared_ptr<Expr> expr;\r
+ std::string identifier;\r
+};\r
+\r
+enum class PrefixOperatorType\r
+{\r
+ Plus, Minus, Increment, Decrement,\r
+ LogicalNot, BitwiseNot, Dereference, AddressOf,\r
+ COUNT\r
+};\r
+static std::string PrefixOperatorTypeStrings[] =\r
+{\r
+ "+", "-", "++", "--", "!", "~", "*", "&" };\r
+\r
+struct PrefixOperatorExpr\r
+{\r
+ PrefixOperatorType type;\r
+ std::shared_ptr<Expr> expr;\r
+};\r
+\r
+enum class PostfixOperatorType\r
+{\r
+ Increment, Decrement,\r
+ COUNT\r
+};\r
+static std::string PostfixOperatorTypeStrings[] =\r
+{\r
+ "++", "--" };\r
+\r
+struct PostfixOperatorExpr\r
+{\r
+ PostfixOperatorType type;\r
+ std::shared_ptr<Expr> expr;\r
+};\r
+\r
+enum class BinaryOperatorType\r
+{\r
+ Plus, Minus, Multiply, Divide, Modulo, BitwiseAnd, BitwiseOr, BitwiseXor, LessThan, GreaterThan,\r
+ LeftShift, RightShift, LogicalAnd, LogicalOr, Equals, NotEquals, LessThanEquals, GreaterThanEquals, BitwiseAndEquals, BitwiseOrEquals, BitwiseXorEquals,\r
+ PlusEquals, MinusEquals, MultiplyEquals, DivideEquals, ModuloEquals,\r
+ LeftShiftEquals, RightShiftEquals,\r
+ COUNT\r
+};\r
+static std::string BinaryOperatorTypeStrings[] =\r
+{\r
+ "+", "-", "*", "/", "%", "&", "|", "^", "<", ">",\r
+ "<<",">>","&&","||","==","!=","<=",">=","&=","|=","^=",\r
+ "+=","-=","*=","/=","%=",\r
+ "<<=",">>=" };\r
+\r
+struct BinaryOperatorExpr\r
+{\r
+ BinaryOperatorType type;\r