@end
@begin E4X
-#include "E4X.hpp"
+#include "E4X/Syntax.hpp"
@end
typedef struct {
CYBoolean *boolean_;
CYClause *clause_;
cy::Syntax::Catch *catch_;
+ CYComment *comment_;
CYComprehension *comprehension_;
CYCompound *compound_;
CYDeclaration *declaration_;
CYProgram *program_;
CYProperty *property_;
CYPropertyName *propertyName_;
+ CYProtocol *protocol_;
CYStatement *statement_;
CYString *string_;
CYThis *this_;
@begin E4X
CYAttribute *attribute_;
+ CYPropertyIdentifier *propertyIdentifier_;
+ CYSelector *selector_;
@end
};
} YYSTYPE;
%token SlashRight "/>"
%token LeftSlash "</"
-%token At "@"
%token ColonColon "::"
%token PeriodPeriod ".."
@end
+@begin E4X ObjectiveC
+%token At "@"
+@end
+
%token Ampersand "&"
%token AmpersandAmpersand "&&"
%token AmpersandEqual "&="
%token SemiColon ";"
%token NewLine "\n"
+%token <comment_> Comment
+
%token OpenParen "("
%token CloseParen ")"
%type <expression_> AdditiveExpression
%type <expression_> AdditiveExpressionNoBF
-%type <expression_> AdditiveExpressionNoWC
%type <argument_> ArgumentList
%type <argument_> ArgumentList_
%type <argument_> ArgumentListOpt
%type <literal_> ArrayLiteral
%type <expression_> AssigneeExpression
%type <expression_> AssigneeExpressionNoBF
-%type <expression_> AssigneeExpressionNoWC
%type <expression_> AssignmentExpression
%type <assignment_> AssignmentExpression_
%type <expression_> AssignmentExpressionNoBF
%type <expression_> AssignmentExpressionNoIn
-%type <expression_> AssignmentExpressionNoWC
%type <expression_> BitwiseANDExpression
%type <expression_> BitwiseANDExpressionNoBF
%type <expression_> BitwiseANDExpressionNoIn
-%type <expression_> BitwiseANDExpressionNoWC
%type <statement_> Block
%type <statement_> Block_
%type <boolean_> BooleanLiteral
%type <expression_> BitwiseORExpression
%type <expression_> BitwiseORExpressionNoBF
%type <expression_> BitwiseORExpressionNoIn
-%type <expression_> BitwiseORExpressionNoWC
%type <expression_> BitwiseXORExpression
%type <expression_> BitwiseXORExpressionNoBF
%type <expression_> BitwiseXORExpressionNoIn
-%type <expression_> BitwiseXORExpressionNoWC
%type <statement_> BreakStatement
%type <expression_> CallExpression
%type <expression_> CallExpressionNoBF
%type <expression_> ConditionalExpression
%type <expression_> ConditionalExpressionNoBF
%type <expression_> ConditionalExpressionNoIn
-%type <expression_> ConditionalExpressionNoWC
%type <statement_> ContinueStatement
%type <clause_> DefaultClause
%type <statement_> DoWhileStatement
%type <expression_> EqualityExpression
%type <expression_> EqualityExpressionNoBF
%type <expression_> EqualityExpressionNoIn
-%type <expression_> EqualityExpressionNoWC
%type <expression_> Expression
%type <expression_> ExpressionOpt
%type <compound_> Expression_
%type <statement_> FunctionBody
%type <statement_> FunctionDeclaration
%type <expression_> FunctionExpression
-%type <expression_> FunctionExpression_
%type <identifier_> Identifier
%type <identifier_> IdentifierOpt
%type <comprehension_> IfComprehension
%type <statement_> LabelledStatement
%type <expression_> LeftHandSideExpression
%type <expression_> LeftHandSideExpressionNoBF
-%type <expression_> LeftHandSideExpressionNoWC
//%type <statement_> LetStatement
%type <literal_> Literal
%type <literal_> LiteralNoRE
%type <expression_> LogicalANDExpression
%type <expression_> LogicalANDExpressionNoBF
%type <expression_> LogicalANDExpressionNoIn
-%type <expression_> LogicalANDExpressionNoWC
%type <expression_> LogicalORExpression
%type <expression_> LogicalORExpressionNoBF
%type <expression_> LogicalORExpressionNoIn
-%type <expression_> LogicalORExpressionNoWC
%type <member_> MemberAccess
%type <expression_> MemberExpression
%type <expression_> MemberExpression_
%type <expression_> MemberExpressionNoBF
-%type <expression_> MemberExpressionNoWC
%type <expression_> MultiplicativeExpression
%type <expression_> MultiplicativeExpressionNoBF
-%type <expression_> MultiplicativeExpressionNoWC
%type <expression_> NewExpression
%type <expression_> NewExpression_
%type <expression_> NewExpressionNoBF
-%type <expression_> NewExpressionNoWC
%type <null_> NullLiteral
%type <literal_> ObjectLiteral
%type <expression_> PostfixExpression
%type <expression_> PostfixExpressionNoBF
-%type <expression_> PostfixExpressionNoWC
%type <expression_> PrimaryExpression
%type <expression_> PrimaryExpressionNo
%type <expression_> PrimaryExpressionNoBF
-%type <expression_> PrimaryExpressionNoWC
-%type <expression_> PrimaryExpressionNoWC_
-@begin E4X
-%type <expression_> PrimaryExpressionWC
-@end
+%type <expression_> PrimaryExpressionNoRE
%type <expression_> PrimaryExpressionBF
%type <statement_> Program
%type <propertyName_> PropertyName
+%type <propertyName_> PropertyName_
%type <property_> PropertyNameAndValueList
%type <property_> PropertyNameAndValueList_
%type <property_> PropertyNameAndValueListOpt
%type <infix_> RelationalExpression_
%type <expression_> RelationalExpressionNoBF
%type <expression_> RelationalExpressionNoIn
-%type <expression_> RelationalExpressionNoWC
%type <infix_> RelationalExpressionNoIn_
%type <statement_> ReturnStatement
%type <expression_> ShiftExpression
%type <expression_> ShiftExpressionNoBF
-%type <expression_> ShiftExpressionNoWC
%type <statement_> SourceElement
%type <statement_> SourceElement_
%type <statement_> SourceElements
%type <statement_> SwitchStatement
%type <statement_> ThrowStatement
%type <statement_> TryStatement
-%type <expression_> UnaryAssigneeExpression
%type <expression_> UnaryExpression
%type <expression_> UnaryExpression_
%type <expression_> UnaryExpressionNoBF
-%type <expression_> UnaryExpressionNoWC
%type <declaration_> VariableDeclaration
%type <declaration_> VariableDeclarationNoIn
%type <declarations_> VariableDeclarationList
%type <statement_> WhileStatement
%type <statement_> WithStatement
+@begin C
+%type <expression_> AssigneeExpressionNoRE
+%type <expression_> CallExpressionNoRE
+%type <expression_> LeftHandSideExpressionNoRE
+%type <expression_> MemberExpressionNoRE
+%type <expression_> NewExpressionNoRE
+%type <expression_> PostfixExpressionNoRE
+%type <expression_> UnaryAssigneeExpression
+%type <expression_> UnaryExpressionNoRE
+@end
+
@begin ObjectiveC
%type <statement_> CategoryStatement
%type <expression_> ClassExpression
%type <message_> ClassMessageDeclarationListOpt
%type <className_> ClassName
%type <className_> ClassNameOpt
+%type <protocol_> ClassProtocolListOpt
+%type <protocol_> ClassProtocols
+%type <protocol_> ClassProtocolsOpt
%type <expression_> MessageExpression
%type <messageParameter_> MessageParameter
%type <messageParameter_> MessageParameters
@end
@begin E4X
-%type <identifier_> PropertyIdentifier_
-%type <identifier_> PropertySelector
-%type <identifier_> PropertySelector_
+%type <propertyIdentifier_> PropertyIdentifier_
+%type <selector_> PropertySelector
+%type <selector_> PropertySelector_
%type <identifier_> QualifiedIdentifier
%type <identifier_> QualifiedIdentifier_
%type <identifier_> WildcardIdentifier
%type <identifier_> XMLPI
%type <attribute_> AttributeIdentifier
-%type <statement_> DefaultXMLNamespaceStatement
+/* XXX: %type <statement_> DefaultXMLNamespaceStatement */
%type <expression_> PropertyIdentifier
%type <expression_> XMLListInitialiser
%type <expression_> XMLInitialiser
@end
-/*
+%nonassoc Identifier_ "abstract" "boolean" "break" "byte" "case" "catch" "char" "class" "const" "continue" "debugger" "default" "delete" "do" "double" "each" "enum" "export" "extends" "false" "final" "finally" "float" /*"for"*/ "function" "goto" "implements" "import" /*"in"*/ /*"instanceof"*/ "int" "interface" "let" "long" "namespace" "native" "new" "null" "package" "private" "protected" "public" "return" "short" "super" "static" "switch" "synchronized" "this" "throw" "throws" "transient" "true" "try" "typeof" "var" "void" "volatile" "while" "with" "xml" "yield"
+
+%nonassoc "if"
+%nonassoc "else"
+
+%nonassoc "++" "--"
+%nonassoc "(" "["
+
%left "*" "/" "%"
%left "+" "-"
%left "<<" ">>" ">>>"
%left "||"
%right "=" "*=" "/=" "%=" "+=" "-=" "<<=" ">>=" ">>>=" "&=" "^=" "|="
-*/
-
-%nonassoc "if"
-%nonassoc "else"
%start Program
| BooleanLiteral { $$ = $1; }
| NumericLiteral { $$ = $1; }
| StringLiteral { $$ = $1; }
+ | "@" StringLiteral { $$ = $2; }
;
LiteralRE
/* 11.1 Primary Expressions {{{ */
PrimaryExpression
- : PrimaryExpressionNoWC { $$ = $1; }
-@begin E4X
- | LexSetRegExp PrimaryExpressionWC { $$ = $2; }
-@end
+ : LexSetRegExp PrimaryExpressionNoRE { $$ = $2; }
;
PrimaryExpressionNoBF
: PrimaryExpressionNo { $$ = $1; }
-@begin E4X
- | PrimaryExpressionWC { $$ = $1; }
-@end
;
-PrimaryExpressionNoWC_
+PrimaryExpressionNoRE
: PrimaryExpressionBF { $$ = $1; }
| PrimaryExpressionNo { $$ = $1; }
;
-PrimaryExpressionNoWC
- : LexSetRegExp PrimaryExpressionNoWC_ { $$ = $2; }
- ;
-
PrimaryExpressionNo
: "this" { $$ = $1; }
| Identifier { $$ = new(driver.pool_) CYVariable($1); }
: PropertyName ":" AssignmentExpression PropertyNameAndValueList_ { $$ = new(driver.pool_) CYProperty($1, $3, $4); }
;
-PropertyName
+PropertyName_
: Identifier { $$ = $1; }
| StringLiteral { $$ = $1; }
| NumericLiteral { $$ = $1; }
;
+
+PropertyName
+ : LexSetRegExp PropertyName_ { $$ = $2; }
+ ;
/* }}} */
/* 11.2 Left-Hand-Side Expressions {{{ */
MemberExpression
: PrimaryExpression { $$ = $1; }
- | FunctionExpression { $$ = $1; }
+ | LexSetRegExp FunctionExpression { $$ = $2; }
| MemberExpression MemberAccess { $2->SetLeft($1); $$ = $2; }
| LexSetRegExp MemberExpression_ { $$ = $2; }
;
| MemberExpression_ { $$ = $1; }
;
-MemberExpressionNoWC
- : PrimaryExpressionNoWC { $$ = $1; }
+@begin C
+MemberExpressionNoRE
+ : PrimaryExpressionNoRE { $$ = $1; }
| FunctionExpression { $$ = $1; }
- | MemberExpression MemberAccess { $2->SetLeft($1); $$ = $2; }
- | LexSetRegExp MemberExpression_ { $$ = $2; }
+ | MemberExpressionNoRE MemberAccess { $2->SetLeft($1); $$ = $2; }
+ | MemberExpression_ { $$ = $1; }
;
+@end
NewExpression_
: "new" NewExpression { $$ = new(driver.pool_) CYNew($2, NULL); }
| NewExpression_ { $$ = $1; }
;
-NewExpressionNoWC
- : MemberExpressionNoWC { $$ = $1; }
- | LexSetRegExp NewExpression_ { $$ = $2; }
+@begin C
+NewExpressionNoRE
+ : MemberExpressionNoRE { $$ = $1; }
+ | NewExpression_ { $$ = $1; }
;
+@end
CallExpression
- : PrimaryExpressionNoWC Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
+ : MemberExpression Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
| CallExpression Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
| CallExpression MemberAccess { $2->SetLeft($1); $$ = $2; }
;
| CallExpressionNoBF MemberAccess { $2->SetLeft($1); $$ = $2; }
;
+@begin C
+CallExpressionNoRE
+ : MemberExpressionNoRE Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
+ | CallExpressionNoRE Arguments { $$ = new(driver.pool_) CYCall($1, $2); }
+ | CallExpressionNoRE MemberAccess { $2->SetLeft($1); $$ = $2; }
+ ;
+@end
+
ArgumentList_
: "," ArgumentList { $$ = $2; }
| { $$ = NULL; }
| CallExpressionNoBF { $$ = $1; }
;
-LeftHandSideExpressionNoWC
- : NewExpressionNoWC { $$ = $1; }
- | CallExpression { $$ = $1; }
+@begin C
+LeftHandSideExpressionNoRE
+ : NewExpressionNoRE { $$ = $1; }
+ | CallExpressionNoRE { $$ = $1; }
;
+@end
/* }}} */
/* 11.3 Postfix Expressions {{{ */
PostfixExpression
| LeftHandSideExpressionNoBF "--" { $$ = new(driver.pool_) CYPostDecrement($1); }
;
-PostfixExpressionNoWC
- : AssigneeExpressionNoWC { $$ = $1; }
- | LeftHandSideExpression "++" { $$ = new(driver.pool_) CYPostIncrement($1); }
- | LeftHandSideExpression "--" { $$ = new(driver.pool_) CYPostDecrement($1); }
+@begin C
+PostfixExpressionNoRE
+ : AssigneeExpressionNoRE { $$ = $1; }
+ | LeftHandSideExpressionNoRE "++" { $$ = new(driver.pool_) CYPostIncrement($1); }
+ | LeftHandSideExpressionNoRE "--" { $$ = new(driver.pool_) CYPostDecrement($1); }
;
+@end
/* }}} */
/* 11.4 Unary Operators {{{ */
UnaryExpression_
| UnaryExpression_ { $$ = $1; }
;
-UnaryExpressionNoWC
- : PostfixExpressionNoWC { $$ = $1; }
- | LexSetRegExp UnaryExpression_ { $$ = $2; }
+@begin C
+UnaryExpressionNoRE
+ : PostfixExpressionNoRE { $$ = $1; }
+ | UnaryExpression_ { $$ = $1; }
;
+@end
/* }}} */
/* 11.5 Multiplicative Operators {{{ */
MultiplicativeExpression
| MultiplicativeExpressionNoBF "/" UnaryExpression { $$ = new(driver.pool_) CYDivide($1, $3); }
| MultiplicativeExpressionNoBF "%" UnaryExpression { $$ = new(driver.pool_) CYModulus($1, $3); }
;
-
-MultiplicativeExpressionNoWC
- : UnaryExpressionNoWC { $$ = $1; }
- | MultiplicativeExpression "*" UnaryExpression { $$ = new(driver.pool_) CYMultiply($1, $3); }
- | MultiplicativeExpression "/" UnaryExpression { $$ = new(driver.pool_) CYDivide($1, $3); }
- | MultiplicativeExpression "%" UnaryExpression { $$ = new(driver.pool_) CYModulus($1, $3); }
- ;
/* }}} */
/* 11.6 Additive Operators {{{ */
AdditiveExpression
| AdditiveExpressionNoBF "+" MultiplicativeExpression { $$ = new(driver.pool_) CYAdd($1, $3); }
| AdditiveExpressionNoBF "-" MultiplicativeExpression { $$ = new(driver.pool_) CYSubtract($1, $3); }
;
-
-AdditiveExpressionNoWC
- : MultiplicativeExpressionNoWC{ $$ = $1; }
- | AdditiveExpression "+" MultiplicativeExpression { $$ = new(driver.pool_) CYAdd($1, $3); }
- | AdditiveExpression "-" MultiplicativeExpression { $$ = new(driver.pool_) CYSubtract($1, $3); }
- ;
/* }}} */
/* 11.7 Bitwise Shift Operators {{{ */
ShiftExpression
| ShiftExpressionNoBF ">>" AdditiveExpression { $$ = new(driver.pool_) CYShiftRightSigned($1, $3); }
| ShiftExpressionNoBF ">>>" AdditiveExpression { $$ = new(driver.pool_) CYShiftRightUnsigned($1, $3); }
;
-
-ShiftExpressionNoWC
- : AdditiveExpressionNoWC { $$ = $1; }
- | ShiftExpression "<<" AdditiveExpression { $$ = new(driver.pool_) CYShiftLeft($1, $3); }
- | ShiftExpression ">>" AdditiveExpression { $$ = new(driver.pool_) CYShiftRightSigned($1, $3); }
- | ShiftExpression ">>>" AdditiveExpression { $$ = new(driver.pool_) CYShiftRightUnsigned($1, $3); }
- ;
/* }}} */
/* 11.8 Relational Operators {{{ */
RelationalExpressionNoIn_
: ShiftExpressionNoBF { $$ = $1; }
| RelationalExpressionNoBF RelationalExpression_ { $2->SetLeft($1); $$ = $2; }
;
-
-RelationalExpressionNoWC
- : ShiftExpressionNoWC { $$ = $1; }
- | RelationalExpression RelationalExpression_ { $2->SetLeft($1); $$ = $2; }
- ;
/* }}} */
/* 11.9 Equality Operators {{{ */
EqualityExpression
| EqualityExpressionNoBF "===" RelationalExpression { $$ = new(driver.pool_) CYIdentical($1, $3); }
| EqualityExpressionNoBF "!==" RelationalExpression { $$ = new(driver.pool_) CYNotIdentical($1, $3); }
;
-
-EqualityExpressionNoWC
- : RelationalExpressionNoWC { $$ = $1; }
- | EqualityExpression "==" RelationalExpression { $$ = new(driver.pool_) CYEqual($1, $3); }
- | EqualityExpression "!=" RelationalExpression { $$ = new(driver.pool_) CYNotEqual($1, $3); }
- | EqualityExpression "===" RelationalExpression { $$ = new(driver.pool_) CYIdentical($1, $3); }
- | EqualityExpression "!==" RelationalExpression { $$ = new(driver.pool_) CYNotIdentical($1, $3); }
- ;
/* }}} */
/* 11.10 Binary Bitwise Operators {{{ */
BitwiseANDExpression
| BitwiseANDExpressionNoBF "&" EqualityExpression { $$ = new(driver.pool_) CYBitwiseAnd($1, $3); }
;
-BitwiseANDExpressionNoWC
- : EqualityExpressionNoWC { $$ = $1; }
- | BitwiseANDExpression "&" EqualityExpression { $$ = new(driver.pool_) CYBitwiseAnd($1, $3); }
- ;
-
BitwiseXORExpression
: BitwiseANDExpression { $$ = $1; }
| BitwiseXORExpression "^" BitwiseANDExpression { $$ = new(driver.pool_) CYBitwiseXOr($1, $3); }
| BitwiseXORExpressionNoBF "^" BitwiseANDExpression { $$ = new(driver.pool_) CYBitwiseXOr($1, $3); }
;
-BitwiseXORExpressionNoWC
- : BitwiseANDExpressionNoWC { $$ = $1; }
- | BitwiseXORExpression "^" BitwiseANDExpression { $$ = new(driver.pool_) CYBitwiseXOr($1, $3); }
- ;
-
BitwiseORExpression
: BitwiseXORExpression { $$ = $1; }
| BitwiseORExpression "|" BitwiseXORExpression { $$ = new(driver.pool_) CYBitwiseOr($1, $3); }
: BitwiseXORExpressionNoBF { $$ = $1; }
| BitwiseORExpressionNoBF "|" BitwiseXORExpression { $$ = new(driver.pool_) CYBitwiseOr($1, $3); }
;
-
-BitwiseORExpressionNoWC
- : BitwiseXORExpressionNoWC { $$ = $1; }
- | BitwiseORExpression "|" BitwiseXORExpression { $$ = new(driver.pool_) CYBitwiseOr($1, $3); }
- ;
/* }}} */
/* 11.11 Binary Logical Operators {{{ */
LogicalANDExpression
| LogicalANDExpressionNoBF "&&" BitwiseORExpression { $$ = new(driver.pool_) CYLogicalAnd($1, $3); }
;
-LogicalANDExpressionNoWC
- : BitwiseORExpressionNoWC { $$ = $1; }
- | LogicalANDExpression "&&" BitwiseORExpression { $$ = new(driver.pool_) CYLogicalAnd($1, $3); }
- ;
-
LogicalORExpression
: LogicalANDExpression { $$ = $1; }
| LogicalORExpression "||" LogicalANDExpression { $$ = new(driver.pool_) CYLogicalOr($1, $3); }
: LogicalANDExpressionNoBF { $$ = $1; }
| LogicalORExpressionNoBF "||" LogicalANDExpression { $$ = new(driver.pool_) CYLogicalOr($1, $3); }
;
-
-LogicalORExpressionNoWC
- : LogicalANDExpressionNoWC { $$ = $1; }
- | LogicalORExpression "||" LogicalANDExpression { $$ = new(driver.pool_) CYLogicalOr($1, $3); }
- ;
/* }}} */
/* 11.12 Conditional Operator ( ? : ) {{{ */
ConditionalExpression
: LogicalORExpressionNoBF { $$ = $1; }
| LogicalORExpressionNoBF "?" AssignmentExpression ":" AssignmentExpression { $$ = new(driver.pool_) CYCondition($1, $3, $5); }
;
-
-ConditionalExpressionNoWC
- : LogicalORExpressionNoWC { $$ = $1; }
- | LogicalORExpression "?" AssignmentExpression ":" AssignmentExpression { $$ = new(driver.pool_) CYCondition($1, $3, $5); }
- ;
/* }}} */
/* 11.13 Assignment Operators {{{ */
AssignmentExpression_
AssigneeExpression
: LeftHandSideExpression { $$ = $1; }
+@begin C
| LexSetRegExp UnaryAssigneeExpression { $$ = $2; }
+@end
;
AssigneeExpressionNoBF
: LeftHandSideExpressionNoBF { $$ = $1; }
+@begin C
| UnaryAssigneeExpression { $$ = $1; }
+@end
;
-AssigneeExpressionNoWC
- : LeftHandSideExpressionNoWC { $$ = $1; }
- | LexSetRegExp UnaryAssigneeExpression { $$ = $2; }
+@begin C
+AssigneeExpressionNoRE
+ : LeftHandSideExpressionNoRE { $$ = $1; }
+ | UnaryAssigneeExpression { $$ = $1; }
;
+@end
AssignmentExpression
: ConditionalExpression { $$ = $1; }
: ConditionalExpressionNoBF { $$ = $1; }
| AssigneeExpressionNoBF AssignmentExpression_ { $2->SetLeft($1); $$ = $2; }
;
-
-AssignmentExpressionNoWC
- : ConditionalExpressionNoWC { $$ = $1; }
- | AssigneeExpression AssignmentExpression_ { $2->SetLeft($1); $$ = $2; }
- ;
/* }}} */
/* 11.14 Comma Operator {{{ */
Expression_
: "function" Identifier "(" FormalParameterList ")" "{" FunctionBody "}" { $$ = new(driver.pool_) CYFunctionStatement($2, $4, $7); }
;
-FunctionExpression_
- : "function" IdentifierOpt "(" FormalParameterList ")" "{" FunctionBody "}" { $$ = new(driver.pool_) CYFunctionExpression($2, $4, $7); }
- ;
-
FunctionExpression
- : LexSetRegExp FunctionExpression_ { $$ = $2; }
+ : "function" IdentifierOpt "(" FormalParameterList ")" "{" FunctionBody "}" { $$ = new(driver.pool_) CYFunctionExpression($2, $4, $7); }
;
FormalParameterList_
| { $$ = NULL; }
;
+// XXX: this should be AssignmentExpressionNoRight
+ClassProtocols
+ : ShiftExpression ClassProtocolsOpt { $$ = new(driver.pool_) CYProtocol($1, $2); }
+ ;
+
+ClassProtocolsOpt
+ : "," ClassProtocols { $$ = $2; }
+ | { $$ = NULL; }
+ ;
+
+ClassProtocolListOpt
+ : "<" ClassProtocols ">" { $$ = $2; }
+ | { $$ = NULL; }
+ ;
+
ClassExpression
- : "@class" ClassNameOpt ClassSuperOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYClassExpression($2, $3, $4, $5); }
+ : "@class" ClassNameOpt ClassSuperOpt ClassProtocolListOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYClassExpression($2, $3, $4, $5, $6); }
;
ClassStatement
- : "@class" ClassName ClassSuperOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYClassStatement($2, $3, $4, $5); }
+ : "@class" ClassName ClassSuperOpt ClassProtocolListOpt ClassFieldList ClassMessageDeclarationListOpt "@end" { $$ = new(driver.pool_) CYClassStatement($2, $3, $4, $5, $6); }
;
CategoryStatement
;
MessageExpression
- : "[" AssignmentExpressionNoWC SelectorList "]" { $$ = new(driver.pool_) CYSendDirect($2, $3); }
+ : "[" AssignmentExpression SelectorList "]" { $$ = new(driver.pool_) CYSendDirect($2, $3); }
| "[" LexSetRegExp "super" SelectorList "]" { $$ = new(driver.pool_) CYSendSuper($4); }
;
@begin C
/* Cycript (C): Pointer Indirection/Addressing {{{ */
UnaryAssigneeExpression
- : "*" UnaryExpression { $$ = new(driver.pool_) CYIndirect($2); }
+ : "*" UnaryExpressionNoRE { $$ = new(driver.pool_) CYIndirect($2); }
;
UnaryExpression_
/* }}} */
@end
+/* YUI: Documentation Comments {{{ */
+Statement_
+ : Comment { $$ = $1; }
+ ;
+/* }}} */
+
@begin E4X
/* Lexer State {{{ */
LexPushRegExp
;
/* }}} */
/* 11.1 Primary Expressions {{{ */
-PrimaryExpressionWC
- : PropertyIdentifier { $$ = $1; }
+PrimaryExpressionNo
+ : PropertyIdentifier { $$ = new(driver.pool_) CYPropertyVariable($1); }
| XMLInitialiser { $$ = $1; }
| XMLListInitialiser { $$ = $1; }
;
;
PropertySelector_
- : PropertySelector
- | "[" Expression "]"
+ : PropertySelector { $$ = $1; }
+ | "[" Expression "]" { $$ = new(driver.pool_) CYSelector($2); }
;
PropertySelector
- : Identifier { $$ = $1; }
+ : Identifier { $$ = new(driver.pool_) CYSelector($1); }
| WildcardIdentifier { $$ = $1; }
;
/* }}} */
/* 11.1.2 Qualified Identifiers {{{ */
QualifiedIdentifier_
- : PropertySelector_ { $$ = $1; }
+ : PropertySelector_ { $$ = new(driver.pool_) CYQualified(NULL, $1); }
| QualifiedIdentifier { $$ = $1; }
;
QualifiedIdentifier
- : PropertySelector "::" PropertySelector_ { $$ = new(driver.pool_) CYQName($1, $3); }
+ : PropertySelector "::" PropertySelector_ { $$ = new(driver.pool_) CYQualified($1, $3); }
;
/* }}} */
/* 11.1.3 Wildcard Identifiers {{{ */
;
/* }}} */
/* 12.1 The default xml namespace Statement {{{ */
-DefaultXMLNamespaceStatement
+/* XXX: DefaultXMLNamespaceStatement
: "default" "xml" "namespace" "=" Expression Terminator { $$ = new(driver.pool_) CYDefaultXMLNamespace($5); }
;
Statement_
: DefaultXMLNamespaceStatement { $$ = $1; }
- ;
+ ; */
/* }}} */
@end