Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision f810e0979506a9676292a2c51a6458b7f46e260c)
+++ src/Parser/ExpressionNode.cc	(revision dc7db63bf0be12448903e49a8a34ea50bdb9008e)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:17:07 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Mar  3 18:22:33 2018
-// Update Count     : 796
+// Last Modified On : Thu Mar 22 11:57:39 2018
+// Update Count     : 801
 //
 
@@ -94,12 +94,4 @@
 } // checkLNInt
 
-static void sepNumeric( string & str, string & units ) {
-	string::size_type posn = str.find_first_of( "`" );
-	if ( posn != string::npos ) {
-		units = "?" + str.substr( posn );				// extract units
-		str.erase( posn );								// remove units
-	} // if
-} // sepNumeric
-
 Expression * build_constantInteger( string & str ) {
 	static const BasicType::Kind kind[2][6] = {
@@ -108,7 +100,4 @@
 		{ BasicType::ShortUnsignedInt, BasicType::UnsignedChar, BasicType::UnsignedInt, BasicType::LongUnsignedInt, BasicType::LongLongUnsignedInt, BasicType::UnsignedInt128, },
 	};
-
-	string units;
-	sepNumeric( str, units );							// separate constant from units
 
 	bool dec = true, Unsigned = false;					// decimal, unsigned constant
@@ -232,7 +221,4 @@
 	} // if
   CLEANUP:
-	if ( units.length() != 0 ) {
-		ret = new UntypedExpr( new NameExpr( units ), { ret } );
-	} // if
 
 	delete &str;										// created by lex
@@ -268,7 +254,4 @@
 	};
 
-	string units;
-	sepNumeric( str, units );							// separate constant from units
-
 	bool complx = false;								// real, complex
 	int size = 1;										// 0 => float, 1 => double, 2 => long double
@@ -303,7 +286,4 @@
 	if ( lnth != -1 ) {									// explicit length ?
 		ret = new CastExpr( ret, new BasicType( Type::Qualifiers(), kind[complx][size] ) );
-	} // if
-	if ( units.length() != 0 ) {
-		ret = new UntypedExpr( new NameExpr( units ), { ret } );
 	} // if
 
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision f810e0979506a9676292a2c51a6458b7f46e260c)
+++ src/Parser/lex.ll	(revision dc7db63bf0be12448903e49a8a34ea50bdb9008e)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Sat Mar  3 18:38:16 2018
- * Update Count     : 640
+ * Last Modified On : Thu Mar 22 14:14:46 2018
+ * Update Count     : 667
  */
 
@@ -57,12 +57,4 @@
 	yyleng = 0;
 	for ( int i = 0; yytext[i] != '\0'; i += 1 ) {
-		if ( yytext[i] == '`' ) {
-			// copy user suffix
-			for ( ; yytext[i] != '\0'; i += 1 ) {
-				yytext[yyleng] = yytext[i];
-				yyleng += 1;
-			} // for
-			break;
-		} // if
 		if ( yytext[i] != '_' ) {
 			yytext[yyleng] = yytext[i];
@@ -90,11 +82,9 @@
 attr_identifier "@"{identifier}
 
-user_suffix_opt ("`"{identifier})?
-
 				// numeric constants, CFA: '_' in constant
 hex_quad {hex}("_"?{hex}){3}
 size_opt (8|16|32|64|128)?
 length ("ll"|"LL"|[lL]{size_opt})|("hh"|"HH"|[hH])
-integer_suffix_opt ("_"?(([uU]({length}?[iI]?)|([iI]{length}))|([iI]({length}?[uU]?)|([uU]{length}))|({length}([iI]?[uU]?)|([uU][iI]))|[zZ]))?{user_suffix_opt}
+integer_suffix_opt ("_"?(([uU]({length}?[iI]?)|([iI]{length}))|([iI]({length}?[uU]?)|([uU]{length}))|({length}([iI]?[uU]?)|([uU][iI]))|[zZ]))?
 
 octal_digits ({octal})|({octal}({octal}|"_")*{octal})
@@ -118,5 +108,5 @@
 floating_length ([fFdDlL]|[lL]{floating_size})
 floating_suffix ({floating_length}?[iI]?)|([iI]{floating_length})
-floating_suffix_opt ("_"?({floating_suffix}|"DL"))?{user_suffix_opt}
+floating_suffix_opt ("_"?({floating_suffix}|"DL"))?
 decimal_digits ({decimal})|({decimal}({decimal}|"_")*{decimal})
 floating_decimal {decimal_digits}"."{exponent}?{floating_suffix_opt}
@@ -125,5 +115,5 @@
 
 binary_exponent "_"?[pP]"_"?[+-]?{decimal_digits}
-hex_floating_suffix_opt ("_"?({floating_suffix}))?{user_suffix_opt}
+hex_floating_suffix_opt ("_"?({floating_suffix}))?
 hex_floating_fraction ({hex_digits}?"."{hex_digits})|({hex_digits}".")
 hex_floating_constant {hex_prefix}(({hex_floating_fraction}{binary_exponent})|({hex_digits}{binary_exponent})){hex_floating_suffix_opt}
@@ -314,8 +304,9 @@
 				/* identifier */
 {identifier}	{ IDENTIFIER_RETURN(); }
+"`"{identifier}"`" {
+	yytext[yyleng - 1] = '\0'; yytext += 1;				// remove backquotes (ok to shorten)
+	IDENTIFIER_RETURN();
+}
 {attr_identifier} { ATTRIBUTE_RETURN(); }
-"`"				{ BEGIN BKQUOTE; }
-<BKQUOTE>{identifier} { IDENTIFIER_RETURN(); }
-<BKQUOTE>"`"	{ BEGIN 0; }
 
 				/* numeric constants */
@@ -332,5 +323,5 @@
 ({cwide_prefix}[_]?)?['] { BEGIN QUOTE; rm_underscore(); strtext = new string( yytext, yyleng ); }
 <QUOTE>[^'\\\n]* { strtext->append( yytext, yyleng ); }
-<QUOTE>['\n]{user_suffix_opt}	{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
+<QUOTE>['\n]	{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
 				/* ' stop editor highlighting */
 
@@ -338,5 +329,5 @@
 ({swide_prefix}[_]?)?["] { BEGIN STRING; rm_underscore(); strtext = new string( yytext, yyleng ); }
 <STRING>[^"\\\n]* { strtext->append( yytext, yyleng ); }
-<STRING>["\n]{user_suffix_opt}	{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
+<STRING>["\n]	{ BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
 				/* " stop editor highlighting */
 
@@ -348,4 +339,5 @@
 				/* punctuation */
 "@"				{ ASCIIOP_RETURN(); }
+"`"				{ ASCIIOP_RETURN(); }
 "["				{ ASCIIOP_RETURN(); }
 "]"				{ ASCIIOP_RETURN(); }
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision f810e0979506a9676292a2c51a6458b7f46e260c)
+++ src/Parser/parser.yy	(revision dc7db63bf0be12448903e49a8a34ea50bdb9008e)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Mar 16 17:24:44 2018
-// Update Count     : 3081
+// Last Modified On : Thu Mar 22 16:25:19 2018
+// Update Count     : 3124
 //
 
@@ -126,4 +126,10 @@
 	} // if
 } // rebindForall
+
+NameExpr * build_postfix_name( const string * name ) {
+	NameExpr * new_name = build_varref( new string( "?`" + *name ) );
+	delete name;
+	return new_name;
+} // build_postfix_name
 
 bool forall = false;									// aggregate have one or more forall qualifiers ?
@@ -480,4 +486,14 @@
 	| '(' compound_statement ')'						// GCC, lambda expression
 		{ $$ = new ExpressionNode( new StmtExpr( dynamic_cast< CompoundStmt * >(maybeMoveBuild< Statement >($2) ) ) ); }
+	| constant '`' IDENTIFIER								// CFA
+		{ $$ = new ExpressionNode( build_func( new ExpressionNode( build_postfix_name( $3 ) ), $1 ) ); }
+	| string_literal '`' IDENTIFIER						// CFA
+		{ $$ = new ExpressionNode( build_func( new ExpressionNode( build_postfix_name( $3 ) ), new ExpressionNode( $1 ) ) ); }
+	| IDENTIFIER '`' IDENTIFIER							// CFA
+		{ $$ = new ExpressionNode( build_func( new ExpressionNode( build_postfix_name( $3 ) ), new ExpressionNode( build_varref( $1 ) ) ) ); }
+	| tuple '`' IDENTIFIER								// CFA
+		{ $$ = new ExpressionNode( build_func( new ExpressionNode( build_postfix_name( $3 ) ), $1 ) ); }
+	| '(' comma_expression ')' '`' IDENTIFIER			// CFA
+		{ $$ = new ExpressionNode( build_func( new ExpressionNode( build_postfix_name( $5 ) ), $2 ) ); }
 	| type_name '.' no_attr_identifier					// CFA, nested type
 		{ SemanticError( yylloc, "Qualified names are currently unimplemented." ); $$ = nullptr; } // FIX ME
