+ virtual bool RightHand() const {
+ return true;
+ }
+
+ virtual void For(CYOutput &out) const;
+ virtual void ForIn(CYOutput &out, CYFlags flags) const;
+
+ virtual const char *ForEachIn() const;
+ virtual CYExpression *ForEachIn(CYContext &out);
+
+ virtual CYExpression *AddArgument(CYContext &context, CYExpression *value);
+
+ virtual void Output(CYOutput &out) const;
+ virtual void Output(CYOutput &out, CYFlags flags) const = 0;
+ void Output(CYOutput &out, unsigned precedence, CYFlags flags) const;
+
+ virtual CYExpression *ClassName(CYContext &context, bool object);
+ virtual void ClassName(CYOutput &out, bool object) const;
+
+ CYExpression *ReplaceAll(CYContext &context);
+
+ virtual CYExpression *Replace(CYContext &context) = 0;
+
+ virtual CYExpression *Primitive(CYContext &context) {
+ return this;
+ }
+
+ virtual CYNumber *Number(CYContext &context) {
+ return NULL;
+ }
+
+ virtual CYString *String(CYContext &context) {
+ return NULL;
+ }