Index: tools/prettyprinter/lex.l
===================================================================
--- tools/prettyprinter/lex.l	(revision 16c95e3b72f9df582d5897baadd9484ebf9e676d)
+++ 	(revision )
@@ -1,169 +1,0 @@
-/*                               -*- Mode: C -*- 
- * 
- * Pretty Printer Lexer, Copyright (C) Rodolfo Gabriel Esteves and Peter A. Buhr 2001
- *      Permission is granted to copy this grammar and to use it within software systems.
- *      THIS GRAMMAR IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
- * 
- * lex.l -- 
- * 
- * Author           : Rodolfo Gabriel Esteves
- * Created On       : Sat Dec 15 11:45:59 2001
- * Last Modified By : Peter A. Buhr
- * Last Modified On : Mon Apr  8 15:48:24 2002
- * Update Count     : 245
- */
-
-%option stack
-%option yylineno
-
-%{
-#include <list>
-#include <string>
-#include <iostream>
-
-#include "parse.h" 
-#include "yacc.tab.h" 
-
-#define RETURN_TOKEN( kind ) yylval.tokenp = new Token( yytext, ws_list, kind ); return kind;
-
-list<string> ws_list;
-string comment_str;
-string code_str;
-%}
-
-integer [0-9]+
-identifier [a-zA-Z_$][0-9a-zA-Z_$]*
-
-simple_escape ['"?\\]
-escape_sequence [\\]{simple_escape}
-c_char [^'\\\n]|{escape_sequence}
-s_char [^"\\\n]|{escape_sequence}
-
-%x C_COMMENT STR C_CODE
-
-/* ---------------------------- Token Section ---------------------------- */
-%%
-<INITIAL,C_CODE>"/*"	{				/* C style comments */
-			#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
-    			    cerr << "\"/*\" : " << yytext << endl;
-			#endif
-			    if ( YYSTATE == C_CODE ) code_str += yytext;
-			    else comment_str += yytext;
-			    yy_push_state(C_COMMENT);
-			}
-<C_COMMENT>(.|"\n")	{				/* C style comments */
-			#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
-    			    cerr << "<C_COMMENT>(.|\\n) : " << yytext << endl;
-			#endif
-			    if ( yy_top_state() == C_CODE ) code_str += yytext;
-			    else comment_str += yytext;
-			}
-<C_COMMENT>"*/"		{				/* C style comments */
-			#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
-    			    cerr << "<C_COMMENT>\"*/\" : " << yytext << endl;
-			#endif
-			    if ( yy_top_state() == C_CODE ) code_str += yytext;
-			    else {
-				comment_str += yytext;
-				//cerr << "C COMMENT : " << endl << comment_str << endl;
-				ws_list.push_back( comment_str );
-				comment_str = "";
-			    }
-			    yy_pop_state();
-			}
-<INITIAL,C_CODE>"//"[^\n]*"\n" {			/* C++ style comments */
-			#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
-    			    cerr << "\"//\"[^\\n]*\"\n\" : " << yytext << endl;
-			#endif
-			    if ( YYSTATE == C_CODE ) code_str += yytext;
-			    else {
-				comment_str += yytext;
-				//cerr << "C++ COMMENT : " << endl << comment_str << endl;
-				ws_list.push_back( comment_str );
-				comment_str = "";
-			    }
-			}
-
-";"			{ RETURN_TOKEN( ';' ) }
-":"			{ RETURN_TOKEN( ':' ) }
-"|"			{ RETURN_TOKEN( '|' ) }
-","			{ RETURN_TOKEN( ',' ) }
-"<"			{ RETURN_TOKEN( '<' ) }
-">"			{ RETURN_TOKEN( '>' ) }
-
-[[:space:]]+		{				/* [ \t\n]+ */
-			    ws_list.push_back( yytext );
-			    //cerr << "WS : " << "\"" << yytext << "\"" << endl;
-			}
-
-<INITIAL>"{"		{ RETURN_TOKEN( '{' ) }
-<INITIAL>"}"		{ RETURN_TOKEN( '}' ) }
-<C_CODE>"{"		{
-			#if defined(DEBUG_ALL) | defined(DEBUG_C)
-			    cerr << "<C_CODE>. : " << yytext << endl;
-			#endif
-			    code_str += yytext;
-			    RETURN_TOKEN( '{' )
-			}
-<C_CODE>"}"		{
-			#if defined(DEBUG_ALL) | defined(DEBUG_C)
-			    cerr << "<C_CODE>. : " << yytext << endl;
-			#endif
-			    code_str += yytext;
-			    RETURN_TOKEN( '}' )
-			}
-
-"%%"			{ RETURN_TOKEN( MARK ) }
-"%{"			{ RETURN_TOKEN( LCURL ) }
-<C_CODE>"%}"		{ RETURN_TOKEN( RCURL ) }
-
-^"%union"       	{ RETURN_TOKEN( UNION ) }
-^"%start"       	{ RETURN_TOKEN( START ) }
-^"%token"       	{ RETURN_TOKEN( TOKEN ) }
-^"%type"	       	{ RETURN_TOKEN( TYPE ) }
-^"%left"	       	{ RETURN_TOKEN( LEFT ) }
-^"%right"	       	{ RETURN_TOKEN( RIGHT ) }
-^"%nonassoc"    	{ RETURN_TOKEN( NONASSOC ) }
-^"%pure_parser"    	{ RETURN_TOKEN( PURE_PARSER ) }
-^"%semantic_parser"    	{ RETURN_TOKEN( SEMANTIC_PARSER ) }
-^"%expect"  	  	{ RETURN_TOKEN( EXPECT ) }
-^"%thong" 	   	{ RETURN_TOKEN( THONG ) }
-
-"%prec" 	   	{ RETURN_TOKEN( PREC ) }
-
-{integer}	    	{ RETURN_TOKEN( INTEGER ); }
-[']{c_char}[']    	{ RETURN_TOKEN( CHARACTER ); }
-{identifier}    	{ RETURN_TOKEN( IDENTIFIER ); }
-
-<C_CODE>["]{s_char}*["]	{				/* hide braces "{}" in strings */
-			#if defined(DEBUG_ALL) | defined(DEBUG_C)
-			    cerr << "<C_CODE>. : " << yytext << endl;
-			#endif
-			    code_str += yytext;
-			}
-
-<C_CODE>(.|\n)		{				/* must be last rule of C_CODE */
-			#if defined(DEBUG_ALL) | defined(DEBUG_C)
-			    cerr << "<C_CODE>. : " << yytext << endl;
-			#endif
-			    code_str += yytext;
-			}
-
-.			{ printf("UNKNOWN CHARACTER:%s\n", yytext); } /* unknown characters */
-%%
-void lexC(void) {
-    BEGIN(C_CODE);
-}
-
-string lexYacc(void) {
-    BEGIN(INITIAL);
-    //cerr << "CODE: " << endl << code_str << endl;
-    string temp( code_str );
-    code_str = "";
-    return temp;
-}
-
-/* Local Variables: */
-/* fill-column: 100 */
-/* compile-command: "gmake" */
-/* End: */
Index: tools/prettyprinter/lex.ll
===================================================================
--- tools/prettyprinter/lex.ll	(revision a67b60e61ca74c9f7db6048cc5cc87b412778d13)
+++ tools/prettyprinter/lex.ll	(revision a67b60e61ca74c9f7db6048cc5cc87b412778d13)
@@ -0,0 +1,169 @@
+/*                               -*- Mode: C -*- 
+ * 
+ * Pretty Printer Lexer, Copyright (C) Rodolfo Gabriel Esteves and Peter A. Buhr 2001
+ *      Permission is granted to copy this grammar and to use it within software systems.
+ *      THIS GRAMMAR IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
+ * 
+ * lex.l -- 
+ * 
+ * Author           : Rodolfo Gabriel Esteves
+ * Created On       : Sat Dec 15 11:45:59 2001
+ * Last Modified By : Peter A. Buhr
+ * Last Modified On : Mon Apr  8 15:48:24 2002
+ * Update Count     : 245
+ */
+
+%option stack
+%option yylineno
+
+%{
+#include <list>
+#include <string>
+#include <iostream>
+
+#include "parse.h" 
+#include "yacc.tab.h" 
+
+#define RETURN_TOKEN( kind ) yylval.tokenp = new Token( yytext, ws_list, kind ); return kind;
+
+list<string> ws_list;
+string comment_str;
+string code_str;
+%}
+
+integer [0-9]+
+identifier [a-zA-Z_$][0-9a-zA-Z_$]*
+
+simple_escape ['"?\\]
+escape_sequence [\\]{simple_escape}
+c_char [^'\\\n]|{escape_sequence}
+s_char [^"\\\n]|{escape_sequence}
+
+%x C_COMMENT STR C_CODE
+
+/* ---------------------------- Token Section ---------------------------- */
+%%
+<INITIAL,C_CODE>"/*"	{				/* C style comments */
+			#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
+    			    cerr << "\"/*\" : " << yytext << endl;
+			#endif
+			    if ( YYSTATE == C_CODE ) code_str += yytext;
+			    else comment_str += yytext;
+			    yy_push_state(C_COMMENT);
+			}
+<C_COMMENT>(.|"\n")	{				/* C style comments */
+			#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
+    			    cerr << "<C_COMMENT>(.|\\n) : " << yytext << endl;
+			#endif
+			    if ( yy_top_state() == C_CODE ) code_str += yytext;
+			    else comment_str += yytext;
+			}
+<C_COMMENT>"*/"		{				/* C style comments */
+			#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
+    			    cerr << "<C_COMMENT>\"*/\" : " << yytext << endl;
+			#endif
+			    if ( yy_top_state() == C_CODE ) code_str += yytext;
+			    else {
+				comment_str += yytext;
+				//cerr << "C COMMENT : " << endl << comment_str << endl;
+				ws_list.push_back( comment_str );
+				comment_str = "";
+			    }
+			    yy_pop_state();
+			}
+<INITIAL,C_CODE>"//"[^\n]*"\n" {			/* C++ style comments */
+			#if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
+    			    cerr << "\"//\"[^\\n]*\"\n\" : " << yytext << endl;
+			#endif
+			    if ( YYSTATE == C_CODE ) code_str += yytext;
+			    else {
+				comment_str += yytext;
+				//cerr << "C++ COMMENT : " << endl << comment_str << endl;
+				ws_list.push_back( comment_str );
+				comment_str = "";
+			    }
+			}
+
+";"			{ RETURN_TOKEN( ';' ) }
+":"			{ RETURN_TOKEN( ':' ) }
+"|"			{ RETURN_TOKEN( '|' ) }
+","			{ RETURN_TOKEN( ',' ) }
+"<"			{ RETURN_TOKEN( '<' ) }
+">"			{ RETURN_TOKEN( '>' ) }
+
+[[:space:]]+		{				/* [ \t\n]+ */
+			    ws_list.push_back( yytext );
+			    //cerr << "WS : " << "\"" << yytext << "\"" << endl;
+			}
+
+<INITIAL>"{"		{ RETURN_TOKEN( '{' ) }
+<INITIAL>"}"		{ RETURN_TOKEN( '}' ) }
+<C_CODE>"{"		{
+			#if defined(DEBUG_ALL) | defined(DEBUG_C)
+			    cerr << "<C_CODE>. : " << yytext << endl;
+			#endif
+			    code_str += yytext;
+			    RETURN_TOKEN( '{' )
+			}
+<C_CODE>"}"		{
+			#if defined(DEBUG_ALL) | defined(DEBUG_C)
+			    cerr << "<C_CODE>. : " << yytext << endl;
+			#endif
+			    code_str += yytext;
+			    RETURN_TOKEN( '}' )
+			}
+
+"%%"			{ RETURN_TOKEN( MARK ) }
+"%{"			{ RETURN_TOKEN( LCURL ) }
+<C_CODE>"%}"		{ RETURN_TOKEN( RCURL ) }
+
+^"%union"       	{ RETURN_TOKEN( UNION ) }
+^"%start"       	{ RETURN_TOKEN( START ) }
+^"%token"       	{ RETURN_TOKEN( TOKEN ) }
+^"%type"	       	{ RETURN_TOKEN( TYPE ) }
+^"%left"	       	{ RETURN_TOKEN( LEFT ) }
+^"%right"	       	{ RETURN_TOKEN( RIGHT ) }
+^"%nonassoc"    	{ RETURN_TOKEN( NONASSOC ) }
+^"%pure_parser"    	{ RETURN_TOKEN( PURE_PARSER ) }
+^"%semantic_parser"    	{ RETURN_TOKEN( SEMANTIC_PARSER ) }
+^"%expect"  	  	{ RETURN_TOKEN( EXPECT ) }
+^"%thong" 	   	{ RETURN_TOKEN( THONG ) }
+
+"%prec" 	   	{ RETURN_TOKEN( PREC ) }
+
+{integer}	    	{ RETURN_TOKEN( INTEGER ); }
+[']{c_char}[']    	{ RETURN_TOKEN( CHARACTER ); }
+{identifier}    	{ RETURN_TOKEN( IDENTIFIER ); }
+
+<C_CODE>["]{s_char}*["]	{				/* hide braces "{}" in strings */
+			#if defined(DEBUG_ALL) | defined(DEBUG_C)
+			    cerr << "<C_CODE>. : " << yytext << endl;
+			#endif
+			    code_str += yytext;
+			}
+
+<C_CODE>(.|\n)		{				/* must be last rule of C_CODE */
+			#if defined(DEBUG_ALL) | defined(DEBUG_C)
+			    cerr << "<C_CODE>. : " << yytext << endl;
+			#endif
+			    code_str += yytext;
+			}
+
+.			{ printf("UNKNOWN CHARACTER:%s\n", yytext); } /* unknown characters */
+%%
+void lexC(void) {
+    BEGIN(C_CODE);
+}
+
+string lexYacc(void) {
+    BEGIN(INITIAL);
+    //cerr << "CODE: " << endl << code_str << endl;
+    string temp( code_str );
+    code_str = "";
+    return temp;
+}
+
+/* Local Variables: */
+/* fill-column: 100 */
+/* compile-command: "gmake" */
+/* End: */
Index: tools/prettyprinter/yacc.y
===================================================================
--- tools/prettyprinter/yacc.y	(revision 16c95e3b72f9df582d5897baadd9484ebf9e676d)
+++ 	(revision )
@@ -1,481 +1,0 @@
-/*                               -*- Mode: C -*- 
- * 
- *  Pretty Printer, Copyright (C) Rodolfo G. Esteves and Peter A. Buhr 2001
- *      Permission is granted to copy this grammar and to use it within software systems.
- *      THIS GRAMMAR IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
- * 
- * yacc.y -- 
- * 
- * Author           : Rodolfo G. Esteves
- * Created On       : Sat Dec 15 13:44:21 2001
- * Last Modified By : Peter A. Buhr
- * Last Modified On : Mon Jun 27 21:51:06 2016
- * Update Count     : 1028
- */
-
-%{
-#include <stdio.h>
-#include "parse.h"
-#include "filter.h"
-
-#define YYDEBUG 1			// get the pretty debugging code to compile
-
-extern list<string> ws_list;		// lex variable containing accumulated whitespace
-void lexC( void );
-string lexYacc( void );
-
-void yyerror( char *s ) {
-    extern int yylineno;
-
-    cerr << "Error in line: " << yylineno << ": " << s << endl;
-    return;
-}
-
-Token *declstart;
-Token *rulestart;
-Token *nameliststart;
-%}
-
-%union {
-    Token *tokenp;
-}
-
-%token<tokenp>	','
-%token<tokenp>	'<'
-%token<tokenp>	'>'
-%token<tokenp>	'{'
-%token<tokenp>	'}'
-%token<tokenp>	':'
-%token<tokenp>	';'
-%token<tokenp>	'|'
-
-%token<tokenp>	MARK			// %%
-%token<tokenp>	LCURL			// %{
-%token<tokenp>	RCURL			// %}
-
-%token<tokenp>	INTEGER			// integer constant
-%token<tokenp>	CHARACTER		// character constant
-%token<tokenp>	IDENTIFIER		// identifier
-%token<tokenp>	CODE			// C code
-
-%token<tokenp>	START			// %start
-%token<tokenp>	UNION			// %union
-%token<tokenp>	TOKEN			// %token
-%token<tokenp>	LEFT			// %left
-%token<tokenp>	RIGHT			// %right
-%token<tokenp>	NONASSOC		// %nonassoc
-%token<tokenp>	TYPE			// %type
-%token<tokenp>	PURE_PARSER		// %pure_parser
-%token<tokenp>	SEMANTIC_PARSER		// %semantic_parser
-%token<tokenp>	EXPECT			// %expect
-%token<tokenp>	THONG			// %thong
-
-%token<tokenp>	PREC			// %prec
-
-%token		END_TERMINALS		// ALL TERMINAL TOKEN NAMES MUST APPEAR BEFORE THIS
-
-%type<tokenp>	sections
-%token		_SECTIONS
-%type<tokenp>	mark
-%type<tokenp>	defsection_opt
-%token		_DEFSECTION_OPT
-%type<tokenp>	declarations
-%type<tokenp>	literalblock
-%token		_LITERALBLOCK
-%type<tokenp>	declaration
-%token		_DECLARATION
-%type<tokenp>	union
-%type<tokenp>	rword
-%type<tokenp>	tag_opt
-%token		_TAG_OPT
-%type<tokenp>	namenolist
-%token		_NAMENOLIST
-%type<tokenp>	nameno
-%token		_NAMENO
-%type<tokenp>	namelist
-%token		_NAMELIST
-%type<tokenp>	name
-%type<tokenp>	rulesection
-%token		_RULESECTION
-%type<tokenp>	rules
-%token		_RULE
-%type<tokenp>	lhs
-%token		_LHS
-%type<tokenp>	rhs
-%token		_RHS
-%type<tokenp>	prod
-%type<tokenp>	prec
-%token		_PREC
-%type<tokenp>	action
-%token		_ACTION
-%type<tokenp>	usersection_opt
-%token		_USERSECTION_OPT
-%type<tokenp>	ccode_opt
-%type<tokenp>	blocks
-
-%start grammar
-
-%%
-grammar		: sections
-			{
-			    filter( $1 );		/* filter parse tree */
-			    freeTree( $1 );		/* free parse-tree storage (optional: used with purify) */
-			}
-		;
-
-sections	: defsection_opt mark rulesection usersection_opt
-			{
-			    $$ = new Token( "sections", _SECTIONS );
-			    $1->left = $2;
-			    $2->left = $3;
-			    $3->left = $4;
-			    $$->down = $1;
-			}
-		;
-
-mark		: MARK
-		| error					/* missing %% */
-			{
-			    cerr << "no input grammar, missing %% mark" << endl;
-			    exit( -1 );
-			}
-		;
-
-defsection_opt	: /* empty */
-			{
-			    //cerr << "defsection_opt1: " << endl;
-			    $$ = new Token( "declaration_opt", _DEFSECTION_OPT );
-			}
-		| declarations
-			{
-			    //cerr << "defsection_opt2: " << $1->text << "(" << $1 << ")" << endl;
-			    $$ = new Token( "declaration_opt", _DEFSECTION_OPT );
-			    $$->down = declstart;
-			}
-		;
-
-declarations	: literalblock
-			{
-			    //cerr << "declarations1: " << $1->text << "(" << $1 << ")" << endl;
-			    $$ = declstart = $1;
-			}
-		| declaration
-			{
-			    //cerr << "declarations2: " << $1->text << "(" << $1 << ")" << endl;
-			    $$ = declstart = new Token( "declaration", _DECLARATION );
-			    $$->down = $1;
-			}
-		| declarations literalblock
-			{
-			    //cerr << "declarations3: "<< $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			    $1->left = $2;
-			    $$ = $2;
-			}
-		| declarations declaration
-			{
-			    //cerr << "declarations4: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			    $$ = new Token( "declaration", _DECLARATION );
-			    $1->left = $$;
-			    $$->down = $2;
-			}
-		;
-
-literalblock	: LCURL
-			{ lexC(); }
-		  ccode_opt
-			{ $<tokenp>$ = new Token( lexYacc(), CODE ); }
-		  RCURL
-			{
-			    //cerr << "literalblock: " << $1->text << "(" << $1 << ") " << $<tokenp>4->text << " " << $5->text << "(" << $5 << ")" << endl;
-			    $1->left = $<tokenp>4;
-			    $<tokenp>4->left = $5;
-			    $$ = new Token( "literalblock", _LITERALBLOCK );
-			    $$->down = $1;
-			}
-		;
-
-declaration	: union
-		| START IDENTIFIER
-			{
-			    $1->left = $2;
-			    $$ = $1;
-			}
-                | rword tag_opt namenolist
-			{
-			    Token *n = new Token( "namenolist", _NAMENOLIST );
-			    n->down = nameliststart;
-			    $1->left = $2;
-			    $2->left = n;
-			    $$ = $1;
-			}
-		| TYPE tag_opt namelist
-			{
-			    Token *n = new Token( "namelist", _NAMELIST );
-			    n->down = nameliststart;
-			    $1->left = $2;
-			    $2->left = n;
-			    $$ = $1;
-			}
-                | PURE_PARSER
-		| SEMANTIC_PARSER
-                | EXPECT INTEGER			/* bison */
-			{
-			    $1->left = $2;
-			    $$ = $1;
-			}
-                | THONG					/* bison */
-		;
-
-union		: UNION
-		  '{'
-			{ lexC(); }
-		  ccode_opt
-			{
-			    // Remove the trailing '}' which is added in lex.
-			    string temp( lexYacc() );
-			    $<tokenp>$ = new Token( temp.substr( 0, temp.length() - 1 ), CODE );
-			}
-		  '}'
-			{
-			    $1->left = $2;
-			    $2->left = $<tokenp>5;
-			    $<tokenp>5->left = $6;
-			    $$ = $1;
-			}
-		;
-
-rword		: TOKEN
-		| LEFT
-		| RIGHT
-		| NONASSOC
-		;
-
-tag_opt		: /* empty */
-			{
-			    //cerr << "tag_opt" << endl;
-			    $$ = new Token( "tag_opt", _TAG_OPT );
-			}
-		| '<' IDENTIFIER '>'
-			{
-			    $1->left = $2;
-			    $2->left = $3;
-			    $$ = new Token( "tag_opt", _TAG_OPT );
-			    $$->down = $1;
-			}
-		;
-
-namenolist	: nameno
-			{
-			    //cerr << "namenolist1: " << $1->text << "(" << $1 << ")" << endl;
-			    $$ = nameliststart = $1;
-			}
-		| namenolist nameno
-			{
-			    //cerr << "namenolist2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			    $1->left = $2;
-			    $$ = $2;
-			}
-		| namenolist ',' nameno
-			{
-			    //cerr << "namenolist3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
-			    $1->left = $2;
-			    $2->left = $3;
-			    $$ = $3;
-			}
-		;
-
-nameno		: name
-			{
-			    $$ = new Token( "nameno", _NAMENO );
-			    $$->down = $1;
-			}
-		| name INTEGER
-			{
-			    $$ = new Token( "nameno", _NAMENO );
-			    $1->left = $2;
-			    $$->down = $1;
-			}
-		;
-
-namelist	: name
-			{
-			    //cerr << "namelist1: " << $1->text << "(" << $1 << ")" << endl;
-			    $$ = nameliststart = $1;
-			}
-		| namelist name
-			{
-			    //cerr << "namelist2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			    $1->left = $2;
-			    $$ = $2;
-			}
-		| namelist ',' name
-			{
-			    //cerr << "namelist3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
-			    $1->left = $2;
-			    $2->left = $3;
-			    $$ = $3;
-			}
-		;
-
-name		: IDENTIFIER
-		| CHARACTER
-		;
-
-rulesection	: rules
-			{
-			    //cerr << "rulesection1: " << $1->text << "(" << $1 << ")" << endl;
-			    $$ = new Token( "rulesection", _RULESECTION );
-			    $$->down = $1;
-			}
-		| error					/* no rules */
-			{
-			    cerr << "no rules in the input grammar" << endl;
-			    exit( -1 );
-			}
-		;
-
-// These grammar rules are complex because the Yacc language is LR(2) due to the optional ';' at the end of
-// rules. The following rules convert the LR(2) grammar into LR(1) by lengthening the rules to allow
-// sufficient look ahead. Unfortunately, this change makes handling the semantic actions more complex because
-// there are two lists (rules, rhs) being built but only one list tail can be returned through $$ for
-// chaining.
-
-rules		: lhs rhs
-			{
-			    //cerr << "rules1: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			    $$ = rulestart;
-			}
-		| lhs rhs ';'
-			{
-			    //cerr << "rules2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
-			    $2->addDownLeftTail( $3 );
-			    $$ = rulestart;
-			}
-		;
-
-lhs		: IDENTIFIER ':'
-			{
-			    //cerr << "lhs: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			    $$ = new Token( "lhs", _LHS );
-			    //cerr << " lhs: "  << $$->text << "(" << $$ << ")" << endl;
-			    $1->left = $2;
-			    $$->down = $1;
-			}
-		;
-
-rhs		: /* empty */
-			{
-			    //cerr << "rhs1: " << $<tokenp>0->text << "(" << $<tokenp>0 << ")"  << endl;
-			    rulestart = new Token( "rule", _RULE );
-			    rulestart->down = $<tokenp>0; // initial lhs is already on the stack from "rules"
-			    $$ = new Token( "rhs", _RHS );
-			    //cerr << "  rhs: " << $$->text << "(" << $$ << ")" << endl;
-			    $<tokenp>0->left = $$;
-			}
-		| rhs lhs
-			{
-			    //cerr << "rhs2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			    Token *temp = new Token( "rule", _RULE );
-			    rulestart->addLeftTail( temp );
-			    temp->down = $2;
-			    $$ = new Token( "rhs", _RHS );
-			    //cerr << "  rhs: "  << $$->text << "(" << $$ << ")" << endl;
-			    $2->left = $$;
-			}
-		| rhs ';' lhs
-			{
-			    //cerr << "rhs3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
-			    $1->addDownLeftTail( $2 );
-			    Token *temp = new Token( "rule", _RULE );
-			    rulestart->addLeftTail( temp );
-			    temp->down = $3;
-			    $$ = new Token( "rhs", _RHS );
-			    //cerr << "  rhs: "  << $$->text << "(" << $$ << ")" << endl;
-			    $3->left = $$;
-			}
-		| rhs prod
-			{
-			    //cerr << "rhs4: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			    $1->addDownLeftTail( $2 );
-			    $$ = $1;
-			}
-		| rhs '|'
-			{
-			    //cerr << "rhs5: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			    $1->addDownLeftTail( $2 );
-			    $$ = new Token( "rhs", _RHS );
-			    $1->left = $$;
-			    //cerr << "  rhs: "  << $$->text << "(" << $$ << ")" << endl;
-			}
-		;
-
-prod		: action
-		| IDENTIFIER
-		| CHARACTER
-		| prec
-		;
-
-prec		: PREC name
-			{
-			    //cerr << "prec: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
-			    $1->left = $2;
-			    $$ = new Token( "prec", _PREC );
-			    $$->down = $1;
-			}
-		;
-
-action		: '{'
-			{ lexC(); }
-		  ccode_opt
-			{
-			    // Remove the trailing '}' added in lex.
-			    string temp( lexYacc() );
-			    $<tokenp>$ = new Token( temp.substr( 0, temp.length() - 1 ), CODE );
-			}
-		  '}'
-			{
-			    $1->left = $<tokenp>4;
-			    $<tokenp>4->left = $5;
-			    $$ = new Token( "action", _ACTION );
-			    $$->down = $1;
-			}
-		;
-
-usersection_opt	: /* empty */
-			{
-			    //cerr << "usersection_opt" << endl;
-			    // attach remaining WS to fictitious code
-			    Token *temp = new Token( "", ws_list, CODE );
-			    $$ = new Token( "usersection_opt", _USERSECTION_OPT );
-			    $$->down = temp;
-			}
-		| MARK
-			{ lexC(); }
-		  ccode_opt
-			{
-			    Token *temp = new Token( lexYacc(), CODE );
-			    //cerr << "usersection_opt: " << $1->text << " " << temp->text << endl;
-			    $1->left = temp;
-			    $$ = new Token( "usersection_opt", _USERSECTION_OPT );
-			    $$->down = $1;
-			}
-		;
-
-ccode_opt	: /* empty */			{}
-		| blocks
-		;
-
-// This rule matches internal braces "{}" in C code to the level of the braces of a union/action.  These
-// internal braces are returned as Tokens from the lexer but are unused because the braces are already
-// concatenated into the code string built by the lexer. Therefore, the tokens for the braces are immediately
-// deleted.
-
-blocks		: '{' { delete $1; } ccode_opt '}' { delete $4; }
-		| blocks '{' { delete $2; } ccode_opt '}' { delete $5; }
-		;
-%%
-
-/* Local Variables: */
-/* fill-column: 110 */
-/* compile-command: "gmake" */
-/* End: */
Index: tools/prettyprinter/yacc.yy
===================================================================
--- tools/prettyprinter/yacc.yy	(revision a67b60e61ca74c9f7db6048cc5cc87b412778d13)
+++ tools/prettyprinter/yacc.yy	(revision a67b60e61ca74c9f7db6048cc5cc87b412778d13)
@@ -0,0 +1,481 @@
+/*                               -*- Mode: C -*- 
+ * 
+ *  Pretty Printer, Copyright (C) Rodolfo G. Esteves and Peter A. Buhr 2001
+ *      Permission is granted to copy this grammar and to use it within software systems.
+ *      THIS GRAMMAR IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
+ * 
+ * yacc.y -- 
+ * 
+ * Author           : Rodolfo G. Esteves
+ * Created On       : Sat Dec 15 13:44:21 2001
+ * Last Modified By : Peter A. Buhr
+ * Last Modified On : Mon Jun 27 21:51:06 2016
+ * Update Count     : 1028
+ */
+
+%{
+#include <stdio.h>
+#include "parse.h"
+#include "filter.h"
+
+#define YYDEBUG 1			// get the pretty debugging code to compile
+
+extern list<string> ws_list;		// lex variable containing accumulated whitespace
+void lexC( void );
+string lexYacc( void );
+
+void yyerror( char *s ) {
+    extern int yylineno;
+
+    cerr << "Error in line: " << yylineno << ": " << s << endl;
+    return;
+}
+
+Token *declstart;
+Token *rulestart;
+Token *nameliststart;
+%}
+
+%union {
+    Token *tokenp;
+}
+
+%token<tokenp>	','
+%token<tokenp>	'<'
+%token<tokenp>	'>'
+%token<tokenp>	'{'
+%token<tokenp>	'}'
+%token<tokenp>	':'
+%token<tokenp>	';'
+%token<tokenp>	'|'
+
+%token<tokenp>	MARK			// %%
+%token<tokenp>	LCURL			// %{
+%token<tokenp>	RCURL			// %}
+
+%token<tokenp>	INTEGER			// integer constant
+%token<tokenp>	CHARACTER		// character constant
+%token<tokenp>	IDENTIFIER		// identifier
+%token<tokenp>	CODE			// C code
+
+%token<tokenp>	START			// %start
+%token<tokenp>	UNION			// %union
+%token<tokenp>	TOKEN			// %token
+%token<tokenp>	LEFT			// %left
+%token<tokenp>	RIGHT			// %right
+%token<tokenp>	NONASSOC		// %nonassoc
+%token<tokenp>	TYPE			// %type
+%token<tokenp>	PURE_PARSER		// %pure_parser
+%token<tokenp>	SEMANTIC_PARSER		// %semantic_parser
+%token<tokenp>	EXPECT			// %expect
+%token<tokenp>	THONG			// %thong
+
+%token<tokenp>	PREC			// %prec
+
+%token		END_TERMINALS		// ALL TERMINAL TOKEN NAMES MUST APPEAR BEFORE THIS
+
+%type<tokenp>	sections
+%token		_SECTIONS
+%type<tokenp>	mark
+%type<tokenp>	defsection_opt
+%token		_DEFSECTION_OPT
+%type<tokenp>	declarations
+%type<tokenp>	literalblock
+%token		_LITERALBLOCK
+%type<tokenp>	declaration
+%token		_DECLARATION
+%type<tokenp>	union
+%type<tokenp>	rword
+%type<tokenp>	tag_opt
+%token		_TAG_OPT
+%type<tokenp>	namenolist
+%token		_NAMENOLIST
+%type<tokenp>	nameno
+%token		_NAMENO
+%type<tokenp>	namelist
+%token		_NAMELIST
+%type<tokenp>	name
+%type<tokenp>	rulesection
+%token		_RULESECTION
+%type<tokenp>	rules
+%token		_RULE
+%type<tokenp>	lhs
+%token		_LHS
+%type<tokenp>	rhs
+%token		_RHS
+%type<tokenp>	prod
+%type<tokenp>	prec
+%token		_PREC
+%type<tokenp>	action
+%token		_ACTION
+%type<tokenp>	usersection_opt
+%token		_USERSECTION_OPT
+%type<tokenp>	ccode_opt
+%type<tokenp>	blocks
+
+%start grammar
+
+%%
+grammar		: sections
+			{
+			    filter( $1 );		/* filter parse tree */
+			    freeTree( $1 );		/* free parse-tree storage (optional: used with purify) */
+			}
+		;
+
+sections	: defsection_opt mark rulesection usersection_opt
+			{
+			    $$ = new Token( "sections", _SECTIONS );
+			    $1->left = $2;
+			    $2->left = $3;
+			    $3->left = $4;
+			    $$->down = $1;
+			}
+		;
+
+mark		: MARK
+		| error					/* missing %% */
+			{
+			    cerr << "no input grammar, missing %% mark" << endl;
+			    exit( -1 );
+			}
+		;
+
+defsection_opt	: /* empty */
+			{
+			    //cerr << "defsection_opt1: " << endl;
+			    $$ = new Token( "declaration_opt", _DEFSECTION_OPT );
+			}
+		| declarations
+			{
+			    //cerr << "defsection_opt2: " << $1->text << "(" << $1 << ")" << endl;
+			    $$ = new Token( "declaration_opt", _DEFSECTION_OPT );
+			    $$->down = declstart;
+			}
+		;
+
+declarations	: literalblock
+			{
+			    //cerr << "declarations1: " << $1->text << "(" << $1 << ")" << endl;
+			    $$ = declstart = $1;
+			}
+		| declaration
+			{
+			    //cerr << "declarations2: " << $1->text << "(" << $1 << ")" << endl;
+			    $$ = declstart = new Token( "declaration", _DECLARATION );
+			    $$->down = $1;
+			}
+		| declarations literalblock
+			{
+			    //cerr << "declarations3: "<< $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
+			    $1->left = $2;
+			    $$ = $2;
+			}
+		| declarations declaration
+			{
+			    //cerr << "declarations4: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
+			    $$ = new Token( "declaration", _DECLARATION );
+			    $1->left = $$;
+			    $$->down = $2;
+			}
+		;
+
+literalblock	: LCURL
+			{ lexC(); }
+		  ccode_opt
+			{ $<tokenp>$ = new Token( lexYacc(), CODE ); }
+		  RCURL
+			{
+			    //cerr << "literalblock: " << $1->text << "(" << $1 << ") " << $<tokenp>4->text << " " << $5->text << "(" << $5 << ")" << endl;
+			    $1->left = $<tokenp>4;
+			    $<tokenp>4->left = $5;
+			    $$ = new Token( "literalblock", _LITERALBLOCK );
+			    $$->down = $1;
+			}
+		;
+
+declaration	: union
+		| START IDENTIFIER
+			{
+			    $1->left = $2;
+			    $$ = $1;
+			}
+                | rword tag_opt namenolist
+			{
+			    Token *n = new Token( "namenolist", _NAMENOLIST );
+			    n->down = nameliststart;
+			    $1->left = $2;
+			    $2->left = n;
+			    $$ = $1;
+			}
+		| TYPE tag_opt namelist
+			{
+			    Token *n = new Token( "namelist", _NAMELIST );
+			    n->down = nameliststart;
+			    $1->left = $2;
+			    $2->left = n;
+			    $$ = $1;
+			}
+                | PURE_PARSER
+		| SEMANTIC_PARSER
+                | EXPECT INTEGER			/* bison */
+			{
+			    $1->left = $2;
+			    $$ = $1;
+			}
+                | THONG					/* bison */
+		;
+
+union		: UNION
+		  '{'
+			{ lexC(); }
+		  ccode_opt
+			{
+			    // Remove the trailing '}' which is added in lex.
+			    string temp( lexYacc() );
+			    $<tokenp>$ = new Token( temp.substr( 0, temp.length() - 1 ), CODE );
+			}
+		  '}'
+			{
+			    $1->left = $2;
+			    $2->left = $<tokenp>5;
+			    $<tokenp>5->left = $6;
+			    $$ = $1;
+			}
+		;
+
+rword		: TOKEN
+		| LEFT
+		| RIGHT
+		| NONASSOC
+		;
+
+tag_opt		: /* empty */
+			{
+			    //cerr << "tag_opt" << endl;
+			    $$ = new Token( "tag_opt", _TAG_OPT );
+			}
+		| '<' IDENTIFIER '>'
+			{
+			    $1->left = $2;
+			    $2->left = $3;
+			    $$ = new Token( "tag_opt", _TAG_OPT );
+			    $$->down = $1;
+			}
+		;
+
+namenolist	: nameno
+			{
+			    //cerr << "namenolist1: " << $1->text << "(" << $1 << ")" << endl;
+			    $$ = nameliststart = $1;
+			}
+		| namenolist nameno
+			{
+			    //cerr << "namenolist2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
+			    $1->left = $2;
+			    $$ = $2;
+			}
+		| namenolist ',' nameno
+			{
+			    //cerr << "namenolist3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
+			    $1->left = $2;
+			    $2->left = $3;
+			    $$ = $3;
+			}
+		;
+
+nameno		: name
+			{
+			    $$ = new Token( "nameno", _NAMENO );
+			    $$->down = $1;
+			}
+		| name INTEGER
+			{
+			    $$ = new Token( "nameno", _NAMENO );
+			    $1->left = $2;
+			    $$->down = $1;
+			}
+		;
+
+namelist	: name
+			{
+			    //cerr << "namelist1: " << $1->text << "(" << $1 << ")" << endl;
+			    $$ = nameliststart = $1;
+			}
+		| namelist name
+			{
+			    //cerr << "namelist2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
+			    $1->left = $2;
+			    $$ = $2;
+			}
+		| namelist ',' name
+			{
+			    //cerr << "namelist3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
+			    $1->left = $2;
+			    $2->left = $3;
+			    $$ = $3;
+			}
+		;
+
+name		: IDENTIFIER
+		| CHARACTER
+		;
+
+rulesection	: rules
+			{
+			    //cerr << "rulesection1: " << $1->text << "(" << $1 << ")" << endl;
+			    $$ = new Token( "rulesection", _RULESECTION );
+			    $$->down = $1;
+			}
+		| error					/* no rules */
+			{
+			    cerr << "no rules in the input grammar" << endl;
+			    exit( -1 );
+			}
+		;
+
+// These grammar rules are complex because the Yacc language is LR(2) due to the optional ';' at the end of
+// rules. The following rules convert the LR(2) grammar into LR(1) by lengthening the rules to allow
+// sufficient look ahead. Unfortunately, this change makes handling the semantic actions more complex because
+// there are two lists (rules, rhs) being built but only one list tail can be returned through $$ for
+// chaining.
+
+rules		: lhs rhs
+			{
+			    //cerr << "rules1: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
+			    $$ = rulestart;
+			}
+		| lhs rhs ';'
+			{
+			    //cerr << "rules2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
+			    $2->addDownLeftTail( $3 );
+			    $$ = rulestart;
+			}
+		;
+
+lhs		: IDENTIFIER ':'
+			{
+			    //cerr << "lhs: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
+			    $$ = new Token( "lhs", _LHS );
+			    //cerr << " lhs: "  << $$->text << "(" << $$ << ")" << endl;
+			    $1->left = $2;
+			    $$->down = $1;
+			}
+		;
+
+rhs		: /* empty */
+			{
+			    //cerr << "rhs1: " << $<tokenp>0->text << "(" << $<tokenp>0 << ")"  << endl;
+			    rulestart = new Token( "rule", _RULE );
+			    rulestart->down = $<tokenp>0; // initial lhs is already on the stack from "rules"
+			    $$ = new Token( "rhs", _RHS );
+			    //cerr << "  rhs: " << $$->text << "(" << $$ << ")" << endl;
+			    $<tokenp>0->left = $$;
+			}
+		| rhs lhs
+			{
+			    //cerr << "rhs2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
+			    Token *temp = new Token( "rule", _RULE );
+			    rulestart->addLeftTail( temp );
+			    temp->down = $2;
+			    $$ = new Token( "rhs", _RHS );
+			    //cerr << "  rhs: "  << $$->text << "(" << $$ << ")" << endl;
+			    $2->left = $$;
+			}
+		| rhs ';' lhs
+			{
+			    //cerr << "rhs3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
+			    $1->addDownLeftTail( $2 );
+			    Token *temp = new Token( "rule", _RULE );
+			    rulestart->addLeftTail( temp );
+			    temp->down = $3;
+			    $$ = new Token( "rhs", _RHS );
+			    //cerr << "  rhs: "  << $$->text << "(" << $$ << ")" << endl;
+			    $3->left = $$;
+			}
+		| rhs prod
+			{
+			    //cerr << "rhs4: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
+			    $1->addDownLeftTail( $2 );
+			    $$ = $1;
+			}
+		| rhs '|'
+			{
+			    //cerr << "rhs5: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
+			    $1->addDownLeftTail( $2 );
+			    $$ = new Token( "rhs", _RHS );
+			    $1->left = $$;
+			    //cerr << "  rhs: "  << $$->text << "(" << $$ << ")" << endl;
+			}
+		;
+
+prod		: action
+		| IDENTIFIER
+		| CHARACTER
+		| prec
+		;
+
+prec		: PREC name
+			{
+			    //cerr << "prec: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
+			    $1->left = $2;
+			    $$ = new Token( "prec", _PREC );
+			    $$->down = $1;
+			}
+		;
+
+action		: '{'
+			{ lexC(); }
+		  ccode_opt
+			{
+			    // Remove the trailing '}' added in lex.
+			    string temp( lexYacc() );
+			    $<tokenp>$ = new Token( temp.substr( 0, temp.length() - 1 ), CODE );
+			}
+		  '}'
+			{
+			    $1->left = $<tokenp>4;
+			    $<tokenp>4->left = $5;
+			    $$ = new Token( "action", _ACTION );
+			    $$->down = $1;
+			}
+		;
+
+usersection_opt	: /* empty */
+			{
+			    //cerr << "usersection_opt" << endl;
+			    // attach remaining WS to fictitious code
+			    Token *temp = new Token( "", ws_list, CODE );
+			    $$ = new Token( "usersection_opt", _USERSECTION_OPT );
+			    $$->down = temp;
+			}
+		| MARK
+			{ lexC(); }
+		  ccode_opt
+			{
+			    Token *temp = new Token( lexYacc(), CODE );
+			    //cerr << "usersection_opt: " << $1->text << " " << temp->text << endl;
+			    $1->left = temp;
+			    $$ = new Token( "usersection_opt", _USERSECTION_OPT );
+			    $$->down = $1;
+			}
+		;
+
+ccode_opt	: /* empty */			{}
+		| blocks
+		;
+
+// This rule matches internal braces "{}" in C code to the level of the braces of a union/action.  These
+// internal braces are returned as Tokens from the lexer but are unused because the braces are already
+// concatenated into the code string built by the lexer. Therefore, the tokens for the braces are immediately
+// deleted.
+
+blocks		: '{' { delete $1; } ccode_opt '}' { delete $4; }
+		| blocks '{' { delete $2; } ccode_opt '}' { delete $5; }
+		;
+%%
+
+/* Local Variables: */
+/* fill-column: 110 */
+/* compile-command: "gmake" */
+/* End: */
