+/* JavaScript FTW: Optional Arguments {{{ */
+FormalParameterList
+ : Identifier "=" AssignmentExpression FormalParameterList_ { $$ = new(driver.pool_) CYOptionalFunctionParameter($1, $3, $4); }
+ ;
+/* }}} */
+/* JavaScript FTW: Ruby Blocks {{{ */
+RubyProcParameterList_
+ : "," RubyProcParameterList { $$ = $2; }
+ | { $$ = NULL; }
+ ;
+
+RubyProcParameterList
+ : Identifier RubyProcParameterList_ { $$ = new(driver.pool_) CYFunctionParameter($1, $2); }
+ | { $$ = NULL; }
+ ;
+
+RubyProcParametersOpt
+ : "|" RubyProcParameterList "|" { $$ = $2; }
+ | { $$ = NULL; }
+ ;
+
+RubyProcExpression
+ : "{" RubyProcParametersOpt StatementListOpt "}" { $$ = new(driver.pool_) CYRubyProc($2, $3); }
+ ;
+
+LeftHandSideExpression
+ : LeftHandSideExpression RubyProcExpression { $$ = new(driver.pool_) CYRubyBlock($1, $2); }
+ ;
+
+LeftHandSideExpressionNoBF
+ : LeftHandSideExpressionNoBF RubyProcExpression { $$ = new(driver.pool_) CYRubyBlock($1, $2); }
+ ;
+
+@begin C
+LeftHandSideExpressionNoRE
+ : LeftHandSideExpressionNoRE RubyProcExpression { $$ = new(driver.pool_) CYRubyBlock($1, $2); }
+ ;
+@end
+/* }}} */