Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 578e6037f1cd4d49eb6369e30c767ffec8ac7ea7)
+++ src/Parser/lex.ll	(revision 994d0802fc3bf8c42de451a2518cc2840b2fb0a6)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Wed Jul 12 18:04:44 2017
- * Update Count     : 535
+ * Last Modified On : Sat Jul 15 08:31:47 2017
+ * Update Count     : 541
  */
 
@@ -125,5 +125,5 @@
 op_unary {op_unary_only}|{op_unary_binary}|{op_unary_pre_post}
 
-op_binary_only "/"|"%"|"^"|"&"|"|"|"<"|">"|"="|"=="|"!="|"<<"|">>"|"<="|">="|"+="|"-="|"*="|"/="|"%="|"&="|"|="|"^="|"<<="|">>="
+op_binary_only "/"|"%"|"\\"|"^"|"&"|"|"|"<"|">"|"="|"=="|"!="|"<<"|">>"|"<="|">="|"+="|"-="|"*="|"/="|"%="|"\\="|"&="|"|="|"^="|"<<="|">>="
 op_binary_over {op_unary_binary}|{op_binary_only}
 				// op_binary_not_over "?"|"->"|"."|"&&"|"||"|"@="
@@ -136,5 +136,5 @@
 
 %%
-				   /* line directives */
+				/* line directives */
 ^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
 	/* " stop highlighting */
@@ -339,4 +339,5 @@
 "/"				{ ASCIIOP_RETURN(); }
 "%"				{ ASCIIOP_RETURN(); }
+"\\"			{ ASCIIOP_RETURN(); }					// CFA, exponentiation
 "^"				{ ASCIIOP_RETURN(); }
 "~"				{ ASCIIOP_RETURN(); }
@@ -364,4 +365,5 @@
 "/="			{ NAMEDOP_RETURN(DIVassign); }
 "%="			{ NAMEDOP_RETURN(MODassign); }
+"\\="			{ NAMEDOP_RETURN(MODassign); }			// CFA, exponentiation
 "&="			{ NAMEDOP_RETURN(ANDassign); }
 "|="			{ NAMEDOP_RETURN(ORassign); }
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 578e6037f1cd4d49eb6369e30c767ffec8ac7ea7)
+++ src/Parser/parser.yy	(revision 994d0802fc3bf8c42de451a2518cc2840b2fb0a6)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 13 14:38:54 2017
-// Update Count     : 2431
+// Last Modified On : Sat Jul 15 08:17:48 2017
+// Update Count     : 2450
 //
 
@@ -168,10 +168,11 @@
 %type<op> ptrref_operator				unary_operator				assignment_operator
 %type<en> primary_expression			postfix_expression			unary_expression
-%type<en> cast_expression				multiplicative_expression	additive_expression			shift_expression
-%type<en> relational_expression			equality_expression			AND_expression				exclusive_OR_expression
-%type<en> inclusive_OR_expression		logical_AND_expression		logical_OR_expression		conditional_expression
-%type<en> constant_expression			assignment_expression		assignment_expression_opt
+%type<en> cast_expression				exponential_expression		multiplicative_expression	additive_expression
+%type<en> shift_expression				relational_expression		equality_expression
+%type<en> AND_expression				exclusive_OR_expression		inclusive_OR_expression
+%type<en> logical_AND_expression		logical_OR_expression
+%type<en> conditional_expression		constant_expression			assignment_expression		assignment_expression_opt
 %type<en> comma_expression				comma_expression_opt
-%type<en> argument_expression_list		argument_expression			assignment_opt
+%type<en> argument_expression_list		argument_expression			default_initialize_opt
 %type<fctl> for_control_expression
 %type<en> subrange
@@ -573,11 +574,17 @@
 	;
 
+exponential_expression:
+	cast_expression
+	| exponential_expression '\\' cast_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
+	;
+
 multiplicative_expression:
-	cast_expression
-	| multiplicative_expression '*' cast_expression
+	exponential_expression
+	| multiplicative_expression '*' exponential_expression
 		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); }
-	| multiplicative_expression '/' cast_expression
+	| multiplicative_expression '/' exponential_expression
 		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Div, $1, $3 ) ); }
-	| multiplicative_expression '%' cast_expression
+	| multiplicative_expression '%' exponential_expression
 		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
 	;
@@ -972,8 +979,13 @@
 		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $2, nullptr, new ExpressionNode( build_constantInteger( *$6 ) ), $9 ) ) ); }
 
-	| handler_key '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = new StatementNode( build_catch( $1, $5, nullptr, $8 ) ); }
-	| handler_clause handler_key '(' push push exception_declaration pop ')' compound_statement pop
-		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $2, $6, nullptr, $9 ) ) ); }
+	| handler_key '(' push push exception_declaration handler_predicate_opt pop ')' compound_statement pop
+		{ $$ = new StatementNode( build_catch( $1, $5, nullptr, $9 ) ); }
+	| handler_clause handler_key '(' push push exception_declaration handler_predicate_opt pop ')' compound_statement pop
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $2, $6, nullptr, $10 ) ) ); }
+	;
+
+handler_predicate_opt:
+	//empty
+	| ':' conditional_expression
 	;
 
@@ -1845,10 +1857,10 @@
 cfa_parameter_declaration:								// CFA, new & old style parameter declaration
 	parameter_declaration
-	| cfa_identifier_parameter_declarator_no_tuple identifier_or_type_name assignment_opt
+	| cfa_identifier_parameter_declarator_no_tuple identifier_or_type_name default_initialize_opt
 		{ $$ = $1->addName( $2 ); }
-	| cfa_abstract_tuple identifier_or_type_name assignment_opt
+	| cfa_abstract_tuple identifier_or_type_name default_initialize_opt
 		// To obtain LR(1), these rules must be duplicated here (see cfa_abstract_declarator).
 		{ $$ = $1->addName( $2 ); }
-	| type_qualifier_list cfa_abstract_tuple identifier_or_type_name assignment_opt
+	| type_qualifier_list cfa_abstract_tuple identifier_or_type_name default_initialize_opt
 		{ $$ = $2->addName( $3 )->addQualifiers( $1 ); }
 	| cfa_function_specifier
@@ -1867,10 +1879,10 @@
 parameter_declaration:
 		// No SUE declaration in parameter list.
-	declaration_specifier_nobody identifier_parameter_declarator assignment_opt
+	declaration_specifier_nobody identifier_parameter_declarator default_initialize_opt
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			$$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr );
 		}
-	| declaration_specifier_nobody type_parameter_redeclarator assignment_opt
+	| declaration_specifier_nobody type_parameter_redeclarator default_initialize_opt
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -1880,7 +1892,7 @@
 
 abstract_parameter_declaration:
-	declaration_specifier_nobody assignment_opt
+	declaration_specifier_nobody default_initialize_opt
 		{ $$ = $1->addInitializer( $2 ? new InitializerNode( $2 ) : nullptr ); }
-	| declaration_specifier_nobody abstract_parameter_declarator assignment_opt
+	| declaration_specifier_nobody abstract_parameter_declarator default_initialize_opt
 		{ $$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr ); }
 	;
@@ -3045,5 +3057,5 @@
 	;
 
-assignment_opt:
+default_initialize_opt:
 	// empty
 		{ $$ = nullptr; }
