12 void ScannerDestroy();
22 void SetNext(CYSource *next) {
28 virtual const char *Name() const = 0;
32 virtual const char *Text() const = 0;
41 CYWord(const char *word) :
46 virtual const char *Text() const {
50 virtual const char *Name() const {
60 virtual const char *Text() const {
66 CYIdentifier *identifier_;
69 CYLabel(CYIdentifier *identifier, CYLabel *next) :
70 identifier_(identifier),
81 void AddLabel(CYIdentifier *identifier) {
82 label_ = new CYLabel(identifier, label_);
86 struct CYForInitialiser {
89 struct CYForInInitialiser {
110 CYString(const char *value) :
115 CYString(const CYIdentifier *identifier) :
116 value_(identifier->Text())
120 const char *String() const {
124 virtual const char *Name() const {
134 double Number() const {
138 virtual const char *Name() const {
193 CYVariable(CYIdentifier *name) :
204 CYPrefix(CYExpression *rhs) :
216 CYInfix(CYExpression *lhs, CYExpression *rhs) :
228 CYPostfix(CYExpression *lhs) :
234 struct CYAssignment :
237 CYAssignment(CYExpression *lhs, CYExpression *rhs) :
245 CYExpression *value_;
248 CYArgument(CYWord *name, CYExpression *value, CYArgument *next = NULL) :
270 CYClause(CYExpression *_case, CYStatement *code) :
276 void SetNext(CYClause *next) {
284 CYExpression *value_;
287 CYElement(CYExpression *value, CYElement *next) :
294 struct CYDeclaration :
297 CYIdentifier *identifier_;
298 CYExpression *initialiser_;
300 CYDeclaration(CYIdentifier *identifier, CYExpression *initialiser) :
301 identifier_(identifier),
302 initialiser_(initialiser)
307 struct CYDeclarations :
311 CYDeclaration *declaration_;
312 CYDeclarations *next_;
314 CYDeclarations(CYDeclaration *declaration, CYDeclarations *next) :
315 declaration_(declaration),
325 CYParameter(CYIdentifier *name, CYParameter *next) :
335 CYForInitialiser *initialiser_;
337 CYExpression *increment_;
340 CYFor(CYForInitialiser *initialiser, CYExpression *test, CYExpression *increment, CYStatement *code) :
341 initialiser_(initialiser),
343 increment_(increment),
352 CYForInInitialiser *initialiser_;
356 CYForIn(CYForInInitialiser *initialiser, CYExpression *set, CYStatement *code) :
357 initialiser_(initialiser),
368 CYExpression *value_;
371 CYProperty(CYName *name, CYExpression *value, CYProperty *next) :
383 CYCatch(CYIdentifier *name, CYStatement *code) :
394 CYArgument *arguments_;
396 CYMessage(CYExpression *self, CYArgument *arguments) :
398 arguments_(arguments)
406 CYExpression *object_;
407 CYExpression *property_;
409 CYMember(CYExpression *object, CYExpression *property) :
419 CYExpression *constructor_;
420 CYArgument *arguments_;
422 CYNew(CYExpression *constructor, CYArgument *arguments) :
423 constructor_(constructor),
424 arguments_(arguments)
432 CYExpression *function_;
433 CYArgument *arguments_;
435 CYCall(CYExpression *function, CYArgument *arguments) :
437 arguments_(arguments)
449 CYIf(CYExpression *test, CYStatement *_true, CYStatement *_false) :
463 CYDoWhile(CYExpression *test, CYStatement *code) :
476 CYWhile(CYExpression *test, CYStatement *code) :
487 CYParameter *parameters_;
490 CYLambda(CYIdentifier *name, CYParameter *parameters, CYSource *body) :
492 parameters_(parameters),
501 CYFunction(CYIdentifier *name, CYParameter *parameters, CYSource *body) :
502 CYLambda(name, parameters, body)
510 CYIdentifier *label_;
512 CYContinue(CYIdentifier *label) :
521 CYIdentifier *label_;
523 CYBreak(CYIdentifier *label) :
532 CYExpression *value_;
534 CYReturn(CYExpression *value) :
550 CYStatement *finally_;
552 CYTry(CYStatement *_try, CYCatch *_catch, CYStatement *finally) :
563 CYExpression *value_;
565 CYThrow(CYExpression *value) :
574 CYExpression *scope_;
577 CYWith(CYExpression *scope, CYStatement *code) :
587 CYExpression *value_;
590 CYSwitch(CYExpression *value, CYClause *clauses) :
602 CYExpression *false_;
604 CYCondition(CYExpression *test, CYExpression *_true, CYExpression *_false) :
611 #define CYPostfix_(op, name) \
612 struct CY ## name : \
615 CY ## name(CYExpression *lhs) : \
621 #define CYPrefix_(op, name) \
622 struct CY ## name : \
625 CY ## name(CYExpression *rhs) : \
631 #define CYInfix_(op, name) \
632 struct CY ## name : \
635 CY ## name(CYExpression *lhs, CYExpression *rhs) : \
641 #define CYAssignment_(op, name) \
642 struct CY ## name ## Assign : \
645 CY ## name ## Assign(CYExpression *lhs, CYExpression *rhs) : \
646 CYAssignment(lhs, rhs) \
651 CYPostfix_("++", PostIncrement)
652 CYPostfix_("--", PostDecrement)
654 CYPrefix_("delete", Delete)
655 CYPrefix_("void", Void)
656 CYPrefix_("typeof", TypeOf)
657 CYPrefix_("++", PreIncrement)
658 CYPrefix_("--", PreDecrement)
659 CYPrefix_("-", Negate)
660 CYPrefix_("~", BitwiseNot)
661 CYPrefix_("!", LogicalNot)
662 CYPrefix_("*", Indirect)
663 CYPrefix_("&", AddressOf)
665 CYInfix_("*", Multiply)
666 CYInfix_("/", Divide)
667 CYInfix_("%", Modulus)
669 CYInfix_("-", Subtract)
670 CYInfix_("<<", ShiftLeft)
671 CYInfix_(">>", ShiftRightSigned)
672 CYInfix_(">>>", ShiftRightUnsigned)
674 CYInfix_(">", Greater)
675 CYInfix_("<=", LessOrEqual)
676 CYInfix_(">=", GreaterOrEqual)
677 CYInfix_("instanceof", InstanceOf)
679 CYInfix_("==", Equal)
680 CYInfix_("!=", NotEqual)
681 CYInfix_("===", Identical)
682 CYInfix_("!==", NotIdentical)
683 CYInfix_("&", BitwiseAnd)
684 CYInfix_("^", BitwiseXOr)
685 CYInfix_("|", BitwiseOr)
686 CYInfix_("&&", LogicalAnd)
687 CYInfix_("||", LogicalOr)
690 CYAssignment_("*=", Multiply)
691 CYAssignment_("/=", Divide)
692 CYAssignment_("%=", Modulus)
693 CYAssignment_("+=", Add)
694 CYAssignment_("-=", Subtract)
695 CYAssignment_("<<=", ShiftLeft)
696 CYAssignment_(">>=", ShiftRightSigned)
697 CYAssignment_(">>>=", ShiftRightUnsigned)
698 CYAssignment_("&=", BitwiseAnd)
699 CYAssignment_("^=", BitwiseXOr)
700 CYAssignment_("|=", BitwiseOr)
702 #endif/*CYPARSER_HPP*/