Index: translator/Parser/DeclarationNode.cc
===================================================================
--- translator/Parser/DeclarationNode.cc	(revision d9a0e763800888addddd70d8848a8f432b825e4b)
+++ translator/Parser/DeclarationNode.cc	(revision 17cd4ebabb684710b2f3698449093c4e84b8fb70)
@@ -19,5 +19,5 @@
 /* these must remain in the same order as the corresponding DeclarationNode enumerations */
 const char *DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue" };
-const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "bool", "complex", "imaginary" };
+const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary" };
 const char *DeclarationNode::modifierName[] = { "signed", "unsigned", "short", "long" };
 const char *DeclarationNode::tyConName[] = { "struct", "union", "context" };
@@ -799,9 +799,9 @@
 		} else if ( StructDecl *agg = dynamic_cast< StructDecl* >( decl ) ) {
 		    StructInstType *inst = new StructInstType( Type::Qualifiers(), agg->get_name() );
-		   *out++ = new ObjectDecl( "", Declaration::NoStorageClass, linkage, 0, inst, 0 );
+		    *out++ = new ObjectDecl( "", Declaration::NoStorageClass, linkage, 0, inst, 0 );
 		    delete agg;
 		} else if ( UnionDecl *agg = dynamic_cast< UnionDecl* >( decl ) ) {
 		    UnionInstType *inst = new UnionInstType( Type::Qualifiers(), agg->get_name() );
-		   *out++ = new ObjectDecl( "", Declaration::NoStorageClass, linkage, 0, inst, 0 );
+		    *out++ = new ObjectDecl( "", Declaration::NoStorageClass, linkage, 0, inst, 0 );
 		}
 	    }
Index: translator/Parser/InitializerNode.cc
===================================================================
--- translator/Parser/InitializerNode.cc	(revision d9a0e763800888addddd70d8848a8f432b825e4b)
+++ translator/Parser/InitializerNode.cc	(revision 17cd4ebabb684710b2f3698449093c4e84b8fb70)
@@ -43,12 +43,12 @@
 	if ( designator != 0 ) {
 	    os << "designated by: (";
-	    ExpressionNode  *curdes = designator;
+	    ExpressionNode *curdes = designator;
 	    while( curdes != 0) {
 		curdes->printOneLine(os);
 		curdes = (ExpressionNode *)(curdes->get_link());
 		if ( curdes ) os << ", ";
-	    }
+	    } // while
 	    os << ")";
-	}
+	} // if
 	if ( expr ) expr->printOneLine(os);
     } else {  // It's an aggregate
@@ -57,5 +57,5 @@
 	    next_init()->printOneLine(os);
 	if (aggregate) os << "--]";
-    }
+    } // if
 
     InitializerNode *moreInit;
@@ -88,5 +88,5 @@
 	if ( get_expression() != 0)
 	    return new SingleInit( get_expression()->build(), designators );
-    }
+    } // if
 
     return 0;
Index: translator/Parser/ParseNode.h
===================================================================
--- translator/Parser/ParseNode.h	(revision d9a0e763800888addddd70d8848a8f432b825e4b)
+++ translator/Parser/ParseNode.h	(revision 17cd4ebabb684710b2f3698449093c4e84b8fb70)
@@ -456,5 +456,5 @@
   ExpressionNode *get_expression() const { return expr; }
 
-  InitializerNode *set_designators( ExpressionNode *des ) { designator = des;  return this; }
+  InitializerNode *set_designators( ExpressionNode *des ) { designator = des; return this; }
   ExpressionNode *get_designators() const { return designator; }
 
Index: translator/Parser/TypeData.cc
===================================================================
--- translator/Parser/TypeData.cc	(revision d9a0e763800888addddd70d8848a8f432b825e4b)
+++ translator/Parser/TypeData.cc	(revision 17cd4ebabb684710b2f3698449093c4e84b8fb70)
@@ -560,5 +560,5 @@
 	    if ( *i == DeclarationNode::Void ) {
 		if ( basic->typeSpec.size() != 1 || !basic->modifiers.empty() ) {
-		    throw SemanticError( "invalid type specifier \"void\" in type ", this );
+		    throw SemanticError( "invalid type specifier \"void\" in type: ", this );
 		} else {
 		    return new VoidType( buildQualifiers() );
@@ -571,5 +571,5 @@
 	      case DeclarationNode::Float:
 		if ( sawDouble ) {
-		    throw SemanticError( "invalid type specifier \"float\" in type ", this );
+		    throw SemanticError( "invalid type specifier \"float\" in type: ", this );
 		} else {
 		    switch ( ret ) {
@@ -581,5 +581,5 @@
 			break;
 		      default:
-			throw SemanticError( "invalid type specifier \"float\" in type ", this );
+			throw SemanticError( "invalid type specifier \"float\" in type: ", this );
 		    }
 		}
@@ -587,5 +587,5 @@
 	      case DeclarationNode::Double:
 		if ( sawDouble ) {
-		    throw SemanticError( "duplicate type specifier \"double\" in type ", this );
+		    throw SemanticError( "duplicate type specifier \"double\" in type: ", this );
 		} else {
 		    switch ( ret ) {
@@ -594,5 +594,5 @@
 			break;
 		      default:
-			throw SemanticError( "invalid type specifier \"double\" in type ", this );
+			throw SemanticError( "invalid type specifier \"double\" in type: ", this );
 		    }
 		}
@@ -609,5 +609,5 @@
 		    break;
 		  default:
-		    throw SemanticError( "invalid type specifier \"complex\" in type ", this );
+		    throw SemanticError( "invalid type specifier \"_Complex\" in type: ", this );
 		}
 		break;
@@ -623,10 +623,10 @@
 		    break;
 		  default:
-		    throw SemanticError( "invalid type specifier \"imaginary\" in type ", this );
+		    throw SemanticError( "invalid type specifier \"_Imaginary\" in type: ", this );
 		}
 		break;
         
 	      default:
-		throw SemanticError( std::string( "invalid type specifier \"" ) + DeclarationNode::basicTypeName[ *i ] + "\" in type ", this );
+		throw SemanticError( std::string( "invalid type specifier \"" ) + DeclarationNode::basicTypeName[ *i ] + "\" in type: ", this );
 	    }
 	}
@@ -666,5 +666,5 @@
 		    break;
 		  default:
-		    throw SemanticError( "invalid type modifier \"long\" in type ", this );
+		    throw SemanticError( "invalid type modifier \"long\" in type: ", this );
 		}
 	    }
@@ -683,5 +683,5 @@
 		    break;
 		  default:
-		    throw SemanticError( "invalid type modifier \"short\" in type ", this );
+		    throw SemanticError( "invalid type modifier \"short\" in type: ", this );
 		}
 	    }
@@ -692,5 +692,5 @@
 		ret = BasicType::SignedInt;
 	    } else if ( sawSigned ) {
-		throw SemanticError( "duplicate type modifer \"signed\" in type ", this );
+		throw SemanticError( "duplicate type modifer \"signed\" in type: ", this );
 	    } else {
 		switch ( ret ) {
@@ -702,5 +702,5 @@
 		    break;
 		  default:
-		    throw SemanticError( "invalid type modifer \"signed\" in type ", this );
+		    throw SemanticError( "invalid type modifer \"signed\" in type: ", this );
 		}
 	    }
@@ -711,5 +711,5 @@
 		ret = BasicType::UnsignedInt;
 	    } else if ( sawSigned ) {
-		throw SemanticError( "invalid type modifer \"unsigned\" in type ", this );
+		throw SemanticError( "invalid type modifer \"unsigned\" in type: ", this );
 	    } else {
 		switch ( ret ) {
@@ -727,5 +727,5 @@
 		    break;
 		  default:
-		    throw SemanticError( "invalid type modifer \"unsigned\" in type ", this );
+		    throw SemanticError( "invalid type modifer \"unsigned\" in type: ", this );
 		}
 	    }
Index: translator/Parser/cfa.y
===================================================================
--- translator/Parser/cfa.y	(revision d9a0e763800888addddd70d8848a8f432b825e4b)
+++ translator/Parser/cfa.y	(revision 17cd4ebabb684710b2f3698449093c4e84b8fb70)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep  1 20:22:55 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Tue Nov 25 23:52:54 2014
- * Update Count     : 890
+ * Last Modified On : Wed Jan  7 09:19:57 2015
+ * Update Count     : 906
  */
 
@@ -294,7 +294,7 @@
 		/* ENUMERATIONconstant is not included here; it is treated as a variable with type
 		   "enumeration constant". */
-	INTEGERconstant		{ $$ = new ConstantNode(ConstantNode::Integer,   $1); }
-	| FLOATINGconstant	{ $$ = new ConstantNode(ConstantNode::Float,     $1); }
-	| CHARACTERconstant	{ $$ = new ConstantNode(ConstantNode::Character, $1); }
+	INTEGERconstant					{ $$ = new ConstantNode(ConstantNode::Integer,   $1); }
+	| FLOATINGconstant				{ $$ = new ConstantNode(ConstantNode::Float,     $1); }
+	| CHARACTERconstant				{ $$ = new ConstantNode(ConstantNode::Character, $1); }
 	;
 
@@ -320,6 +320,6 @@
 
 string_literal_list:					/* juxtaposed strings are concatenated */
-	STRINGliteral				{ $$ = new ConstantNode(ConstantNode::String, $1); }
-	| string_literal_list STRINGliteral	{ $$ = $1->append( $2 ); }
+	STRINGliteral					{ $$ = new ConstantNode(ConstantNode::String, $1); }
+	| string_literal_list STRINGliteral		{ $$ = $1->append( $2 ); }
 	;
 
@@ -352,10 +352,8 @@
 		{ $$ = new CompositeExprNode($1, $3); }
 	| postfix_expression '.' no_attr_identifier
-		{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::FieldSel), $1,
-					     new VarRefNode($3)); }
+		{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::FieldSel), $1, new VarRefNode($3)); }
 	| postfix_expression '.' '[' push field_list pop ']' /* CFA, tuple field selector */
 	| postfix_expression ARROW no_attr_identifier
-		{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::PFieldSel), $1,
-					     new VarRefNode($3)); }
+		{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::PFieldSel), $1, new VarRefNode($3)); }
 	| postfix_expression ARROW '[' push field_list pop ']' /* CFA, tuple field selector */
 	| postfix_expression ICR
@@ -371,5 +369,5 @@
 	argument_expression
 	| argument_expression_list ',' argument_expression
-						{ $$ = (ExpressionNode *)($1->set_link($3)); }
+							{ $$ = (ExpressionNode *)($1->set_link($3)); }
 	;
 
@@ -379,5 +377,5 @@
 	| assignment_expression
 	| no_attr_identifier ':' assignment_expression
-                                                { $$ = $3->set_asArgName($1); }
+							{ $$ = $3->set_asArgName($1); }
 		/* Only a list of no_attr_identifier_or_typedef_name is allowed in this context. However, there
 		   is insufficient look ahead to distinguish between this list of parameter names and a tuple,
@@ -391,18 +389,18 @@
 field_list:						/* CFA, tuple field selector */
 	field
-	| field_list ',' field                  { $$ = (ExpressionNode *)$1->set_link( $3 ); }
+	| field_list ',' field				{ $$ = (ExpressionNode *)$1->set_link( $3 ); }
 	;
 
 field:							/* CFA, tuple field selector */
 	no_attr_identifier
-						{ $$ = new VarRefNode( $1 ); }
+							{ $$ = new VarRefNode( $1 ); }
 	| no_attr_identifier '.' field
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::FieldSel), new VarRefNode( $1 ), $3); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::FieldSel), new VarRefNode( $1 ), $3); }
 	| no_attr_identifier '.' '[' push field_list pop ']'
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::FieldSel), new VarRefNode( $1 ), $5); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::FieldSel), new VarRefNode( $1 ), $5); }
 	| no_attr_identifier ARROW field
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::PFieldSel), new VarRefNode( $1 ), $3); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::PFieldSel), new VarRefNode( $1 ), $3); }
 	| no_attr_identifier ARROW '[' push field_list pop ']'
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::PFieldSel), new VarRefNode( $1 ), $5); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::PFieldSel), new VarRefNode( $1 ), $5); }
 	;
 
@@ -440,13 +438,12 @@
 		{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::AlignOf), new TypeValueNode($3)); }
 	| ANDAND no_attr_identifier			/* GCC, address of label */
-		{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::LabelAddress),
-					     new VarRefNode($2, true)); }
+		{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::LabelAddress), new VarRefNode($2, true)); }
 	;
 
 unary_operator:
-	'&'                               { $$ = new OperatorNode(OperatorNode::AddressOf); }
-	| '+'                             { $$ = new OperatorNode(OperatorNode::UnPlus); }
-	| '-'                             { $$ = new OperatorNode(OperatorNode::UnMinus); }
-	| '~'                             { $$ = new OperatorNode(OperatorNode::BitNeg); }
+	'&'						{ $$ = new OperatorNode(OperatorNode::AddressOf); }
+	| '+'						{ $$ = new OperatorNode(OperatorNode::UnPlus); }
+	| '-'						{ $$ = new OperatorNode(OperatorNode::UnMinus); }
+	| '~'						{ $$ = new OperatorNode(OperatorNode::BitNeg); }
 	;
 
@@ -454,9 +451,7 @@
 	unary_expression
 	| '(' type_name_no_function ')' cast_expression
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Cast),
-								       new TypeValueNode($2), $4); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Cast), new TypeValueNode($2), $4); }
 	| '(' type_name_no_function ')' tuple
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Cast),
-								       new TypeValueNode($2), $4); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Cast), new TypeValueNode($2), $4); }
 	;
 
@@ -464,9 +459,9 @@
 	cast_expression
 	| multiplicative_expression '*' cast_expression
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Mul),$1,$3); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Mul),$1,$3); }
 	| multiplicative_expression '/' cast_expression
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Div),$1,$3); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Div),$1,$3); }
 	| multiplicative_expression '%' cast_expression
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Mod),$1,$3); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Mod),$1,$3); }
 	;
 
@@ -474,7 +469,7 @@
 	multiplicative_expression
 	| additive_expression '+' multiplicative_expression
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Plus),$1,$3); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Plus),$1,$3); }
 	| additive_expression '-' multiplicative_expression
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Minus),$1,$3); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Minus),$1,$3); }
 	;
 
@@ -482,5 +477,5 @@
 	additive_expression
 	| shift_expression LS additive_expression
-						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::LShift),$1,$3); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::LShift),$1,$3); }
 	| shift_expression RS additive_expression
 						{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::RShift),$1,$3); }
@@ -558,7 +553,7 @@
 	conditional_expression
 	| unary_expression '=' assignment_expression
-						{ $$ =new CompositeExprNode(new OperatorNode(OperatorNode::Assign), $1, $3); }
+							{ $$ =new CompositeExprNode(new OperatorNode(OperatorNode::Assign), $1, $3); }
 	| unary_expression assignment_operator assignment_expression
-						{ $$ =new CompositeExprNode($2, $1, $3); }
+							{ $$ =new CompositeExprNode($2, $1, $3); }
 	| tuple assignment_opt				/* CFA, tuple expression */
 		{
@@ -1209,5 +1204,5 @@
 			typedefTable.enterScope();
 		}
-	  type_parameter_list ')'		/* CFA */
+	  type_parameter_list ')'			/* CFA */
 		{
 			typedefTable.leaveScope();
@@ -1630,19 +1625,19 @@
 
 initializer_opt:
-	/* empty */                             { $$ = 0; }
-	| '=' initializer                       { $$ = $2; }
+	/* empty */                             	{ $$ = 0; }
+	| '=' initializer                       	{ $$ = $2; }
 	;
 
 initializer:
-	assignment_expression			{ $$ = new InitializerNode($1); }
-	| '{' initializer_list comma_opt '}'    { $$ = new InitializerNode($2, true); }
+	assignment_expression				{ $$ = new InitializerNode($1); }
+	| '{' initializer_list comma_opt '}'    	{ $$ = new InitializerNode($2, true); }
 	;
 
 initializer_list:
 	initializer
-	| designation initializer                            { $$ = $2->set_designators( $1 ); }
-	| initializer_list ',' initializer                   { $$ = (InitializerNode *)( $1->set_link($3) ); }
+	| designation initializer			{ $$ = $2->set_designators( $1 ); }
+	| initializer_list ',' initializer		{ $$ = (InitializerNode *)( $1->set_link($3) ); }
 	| initializer_list ',' designation initializer
-					   { $$ = (InitializerNode *)( $1->set_link( $4->set_designators($3) ) ); }
+							{ $$ = (InitializerNode *)( $1->set_link( $4->set_designators($3) ) ); }
 	;
 
@@ -1659,26 +1654,26 @@
 designation:
 	designator_list ':'				/* ANSI99, CFA uses ":" instead of "=" */
-	| no_attr_identifier_or_typedef_name ':'		/* GCC, field name */
-						       { $$ = new VarRefNode( $1 ); }
+	| no_attr_identifier_or_typedef_name ':'	/* GCC, field name */
+							{ $$ = new VarRefNode( $1 ); }
 	;
 
 designator_list:					/* ANSI99 */
 	designator
-	| designator_list designator                   { $$ = (ExpressionNode *)($1->set_link( $2 )); }
+	| designator_list designator			{ $$ = (ExpressionNode *)($1->set_link( $2 )); }
 	;
 
 designator:
 	'.' no_attr_identifier_or_typedef_name		/* ANSI99, field name */
-						       { $$ = new VarRefNode( $2 ); }
+							{ $$ = new VarRefNode( $2 ); }
 	| '[' push assignment_expression pop ']'	/* ANSI99, single array element */
 		/* assignment_expression used instead of constant_expression because of shift/reduce conflicts
 		   with tuple. */
-						       { $$ = $3; }
+							{ $$ = $3; }
 	| '[' push subrange pop ']'			/* CFA, multiple array elements */
-						       { $$ = $3; }
+							{ $$ = $3; }
 	| '[' push constant_expression ELLIPSIS constant_expression pop ']' /* GCC, multiple array elements */
-						       { $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Range), $3, $5); }
+							{ $$ = new CompositeExprNode(new OperatorNode(OperatorNode::Range), $3, $5); }
 	| '.' '[' push field_list pop ']'		/* CFA, tuple field selector */
-						       { $$ = $4; }
+							{ $$ = $4; }
 	;
 
@@ -2492,18 +2487,21 @@
 	ISO/IEC 9899:1999 Section 6.7.5.2(1) : "The optional type qualifiers and the keyword static shall
 	appear only in a declaration of a function parameter with an array type, and then only in the
-	outermost array type derivation."
-   */
+	outermost array type derivation." */
 
 array_parameter_1st_dimension:
 	'[' push pop ']'
 		{ $$ = DeclarationNode::newArray( 0, 0, false ); }
+	// multi_array_dimension handles the '[' '*' ']' case
 	| '[' push type_qualifier_list '*' pop ']'	/* remaining ANSI99 */
 		{ $$ = DeclarationNode::newVarArray( $3 ); }
+	| '[' push type_qualifier_list pop ']'
+		{ $$ = DeclarationNode::newArray( 0, $3, false ); }
+	// multi_array_dimension handles the '[' assignment_expression ']' case
 	| '[' push type_qualifier_list assignment_expression pop ']'
 		{ $$ = DeclarationNode::newArray( $4, $3, false ); }
-	| '[' push STATIC assignment_expression pop ']'
-		{ $$ = DeclarationNode::newArray( $4, 0, true ); }
-	| '[' push STATIC type_qualifier_list assignment_expression pop ']'
+	| '[' push STATIC type_qualifier_list_opt assignment_expression pop ']'
 		{ $$ = DeclarationNode::newArray( $5, $4, true ); }
+	| '[' push type_qualifier_list STATIC assignment_expression pop ']'
+		{ $$ = DeclarationNode::newArray( $5, $3, true ); }
 	;
 
