Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 90592137ba64a318983658fd3c7acaa5e30676c6)
+++ src/Parser/parser.yy	(revision 25f49f46c4a97a9fe7b79545268b44662d365cb4)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Oct 19 22:19:33 2016
-// Update Count     : 2003
+// Last Modified On : Wed Oct 26 17:35:53 2016
+// Update Count     : 2066
 //
 
@@ -94,5 +94,9 @@
 %token<tok> IDENTIFIER			QUOTED_IDENTIFIER		TYPEDEFname				TYPEGENname
 %token<tok> ATTR_IDENTIFIER		ATTR_TYPEDEFname		ATTR_TYPEGENname
-%token<tok> INTEGERconstant		FLOATINGconstant		CHARACTERconstant		STRINGliteral
+%token<tok> INTEGERconstant		CHARACTERconstant		STRINGliteral
+// Floating point constant is broken into three kinds of tokens because of the ambiguity with tuple indexing and
+// overloading constants 0/1, e.g., x.1 is lexed as (x)(.1), where (.1) is a factional constant, but is semantically
+// converted into the tuple index (.)(1). e.g., 3.x
+%token<tok>	REALDECIMALconstant	REALFRACTIONconstant	FLOATINGconstant
 %token<tok> ZERO				ONE						// CFA
 
@@ -312,4 +316,6 @@
 		// ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
 	INTEGERconstant								{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
+	| REALDECIMALconstant						{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
+	| REALFRACTIONconstant						{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
 	| FLOATINGconstant							{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
 	| CHARACTERconstant							{ $$ = new ExpressionNode( build_constantChar( *$1 ) ); }
@@ -358,4 +364,5 @@
 	| zero_one
 		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
+	| tuple
 	| '(' comma_expression ')'
 		{ $$ = $2; }
@@ -374,10 +381,8 @@
 	| postfix_expression '(' argument_expression_list ')'
 		{ $$ = new ExpressionNode( build_func( $1, $3 ) ); }
-		// ambiguity with .0 so space required after field-selection, e.g.
-		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 	| postfix_expression '.' no_attr_identifier
 		{ $$ = new ExpressionNode( build_fieldSel( $1, build_varref( $3 ) ) ); }
 	| postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
-	| postfix_expression '.' INTEGERconstant
+	| postfix_expression REALFRACTIONconstant			// CFA, tuple index
 	| postfix_expression ARROW no_attr_identifier
 		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
@@ -416,7 +421,9 @@
 field:													// CFA, tuple field selector
 	field_name
-		// ambiguity with .0 so space required after field-selection, e.g.
-		//   struct S { int 0, 1; } s; s. 0 = 0; s. 1 = 1;
 		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
+	| REALDECIMALconstant field
+		{ $$ = new ExpressionNode( build_fieldSel( $2, build_varref( $1 ) ) ); }
+	| REALDECIMALconstant '[' push field_list pop ']'
+		{ $$ = new ExpressionNode( build_fieldSel( $4, build_varref( $1 ) ) ); }
 	| field_name '.' field
 		{ $$ = new ExpressionNode( build_fieldSel( $3, build_varref( $1 ) ) ); }
@@ -430,7 +437,15 @@
 
 field_name:
-	no_attr_identifier
-		// x.1, x.[0, 0.0]
-	| INTEGERconstant
+	INTEGERconstant	fraction_constants
+		{ $$ = $1; }
+	| FLOATINGconstant fraction_constants
+		{ $$ = $1; }
+	| no_attr_identifier fraction_constants
+		{ $$ = $1; }
+	;
+
+fraction_constants:
+	// empty
+	| fraction_constants REALFRACTIONconstant
 	;
 
@@ -505,6 +520,6 @@
 	| '(' type_name_no_function ')' cast_expression
 		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
-	| '(' type_name_no_function ')' tuple
-		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
+//	| '(' type_name_no_function ')' tuple
+//		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
 	;
 
@@ -592,6 +607,6 @@
 	| logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand
 		{ $$ = new ExpressionNode( build_cond( $1, $1, $4 ) ); }
-	| logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
-		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
+//	| logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
+//		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
 	;
 
@@ -605,6 +620,6 @@
 	| unary_expression assignment_operator assignment_expression
 		{ $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); }
-	| tuple assignment_opt								// CFA, tuple expression
-		{ $$ = ( $2 == 0 ) ? $1 : new ExpressionNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
+//	| tuple assignment_opt								// CFA, tuple expression
+//		{ $$ = ( $2 == 0 ) ? $1 : new ExpressionNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
 	;
 
@@ -633,9 +648,9 @@
 		// CFA, one assignment_expression is factored out of comma_expression to eliminate a shift/reduce conflict with
 		// comma_expression in new_identifier_parameter_array and new_abstract_array
-	'[' ']'
-		{ $$ = new ExpressionNode( build_tuple() ); }
-	| '[' push assignment_expression pop ']'
-		{ $$ = new ExpressionNode( build_tuple( $3 ) ); }
-	| '[' push ',' tuple_expression_list pop ']'
+//	'[' ']'
+//		{ $$ = new ExpressionNode( build_tuple() ); }
+//	'[' push assignment_expression pop ']'
+//		{ $$ = new ExpressionNode( build_tuple( $3 ) ); }
+	'[' push ',' tuple_expression_list pop ']'
 		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); }
 	| '[' push assignment_expression ',' tuple_expression_list pop ']'
@@ -1136,8 +1151,8 @@
 
 new_function_specifier:									// CFA
-	'[' ']' identifier_or_type_name '(' push new_parameter_type_list_opt pop ')' // S/R conflict
-		{
-			$$ = DeclarationNode::newFunction( $3, DeclarationNode::newTuple( 0 ), $6, 0, true );
-		}
+//	'[' ']' identifier_or_type_name '(' push new_parameter_type_list_opt pop ')' // S/R conflict
+//		{
+//			$$ = DeclarationNode::newFunction( $3, DeclarationNode::newTuple( 0 ), $6, 0, true );
+//		}
 //	'[' ']' identifier '(' push new_parameter_type_list_opt pop ')'
 //		{
@@ -1158,5 +1173,5 @@
 		// type_specifier can resolve to just TYPEDEFname (e.g., typedef int T; int f( T );). Therefore this must be
 		// flattened to allow lookahead to the '(' without having to reduce identifier_or_type_name.
-	| new_abstract_tuple identifier_or_type_name '(' push new_parameter_type_list_opt pop ')'
+	new_abstract_tuple identifier_or_type_name '(' push new_parameter_type_list_opt pop ')'
 		// To obtain LR(1 ), this rule must be factored out from function return type (see new_abstract_declarator).
 		{
@@ -2822,7 +2837,7 @@
 
 new_abstract_function:									// CFA
-	'[' ']' '(' new_parameter_type_list_opt ')'
-		{ $$ = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), $4, nullptr ); }
-	| new_abstract_tuple '(' push new_parameter_type_list_opt pop ')'
+//	'[' ']' '(' new_parameter_type_list_opt ')'
+//		{ $$ = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), $4, nullptr ); }
+	new_abstract_tuple '(' push new_parameter_type_list_opt pop ')'
 		{ $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
 	| new_function_return '(' push new_parameter_type_list_opt pop ')'
