Changeset c9383ee


Ignore:
Timestamp:
Jun 29, 2017, 9:39:17 AM (4 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
aaron-thesis, arm-eh, cleanup-dtors, deferred_resn, demangler, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, resolv-new, with_gc
Children:
288eede, 8c680e9, ae47a23
Parents:
c89503c
Message:

update input file and formatting

Location:
tools/prettyprinter
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • tools/prettyprinter/filter.cc

    rc89503c rc9383ee  
    1010// Created On       : Tue Apr  9 22:33:44 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun 28 22:56:58 2017
    13 // Update Count     : 72
     12// Last Modified On : Thu Jun 29 08:56:46 2017
     13// Update Count     : 73
    1414//
    1515
     
    2222
    2323
    24 void (*filter)( Token *tree ) = 0;
    25 
    26 
    27 void freeTree( Token *tree ) {                          // postfix tree traversal
     24void (* filter)( Token * tree ) = 0;
     25
     26
     27void freeTree( Token * tree ) {                                                 // postfix tree traversal
    2828        if ( tree == NULL ) return;
    2929        if ( tree->down != NULL ) freeTree( tree->down );
     
    3434
    3535
    36 void Identity( Token *tree ) {                          // prefix tree traversal
     36void Identity( Token * tree ) {                                                 // prefix tree traversal
    3737        if ( tree == NULL ) return;
    3838        // print only the terminals
     
    4343
    4444
    45 static void Parse_Tree1( Token *tree, int indent ) {    // prefix tree traversal
     45static void Parse_Tree1( Token * tree, int indent ) {   // prefix tree traversal
    4646        cout << string( indent, ' ' );
    47         if ( tree->isTerminal() ) {                             // terminals
     47        if ( tree->isTerminal() ) {                                                     // terminals
    4848                cout << "\"" << tree->getText() << "\"";
    49         } else {                                                // non-terminals
     49        } else {                                                                                        // non-terminals
    5050                cout << tree->getText();
    5151        } // if
     
    5757} // Parse_Tree1
    5858
    59 void Parse_Tree( Token *tree ) {
     59void Parse_Tree( Token * tree ) {
    6060        if ( tree == NULL ) return;
    6161        Parse_Tree1( tree, 0 );
     
    6363
    6464
    65 void Nocode( Token *tree ) {                            // prefix tree traversal
     65void Nocode( Token * tree ) {                                                   // prefix tree traversal
    6666        static bool declprt = true;
    6767        if ( tree == NULL ) return;
    6868
    69         if ( tree->isTerminal() ) {                             // terminals
     69        if ( tree->isTerminal() ) {                                                     // terminals
    7070                cout << tree->getWS() << tree->getText();
    71         } else {                                                // non-terminals
     71        } else {                                                                                        // non-terminals
    7272                switch ( tree->getKind() ) {
    7373                  case _RHS: {
    74                           int first = 0;                                // first RHS after ':' or '|' treated specially
     74                          int first = 0;                                                        // first RHS after ':' or '|' treated specially
    7575                          int push = 0, pop = 0;
    76                           for ( Token *i = tree->down; i != 0; i = i->left ) {
     76                          for ( Token * i = tree->down; i != 0; i = i->left ) {
    7777                                  switch ( i->getKind() ) {
    7878                                        case _ACTION:
     
    8282                                          break;
    8383                                        case _PREC:
    84                                           Nocode( i->down );            // print verbatim
    85                                           break;
    86                                         case '|':                               // start of alternative and special case
     84                                          Nocode( i->down );                            // print verbatim
     85                                          break;
     86                                        case '|':                                                       // start of alternative and special case
    8787                                          first = 0;
    88                                         case ';':                               // print with whitespace
     88                                        case ';':                                                       // print with whitespace
    8989                                          cout << string( (push * 4 + pop * 3) / 7, '\t' );
    9090                                          push = pop = 0;
     
    9595                                                  if ( i->getText() == "push" ) {
    9696                                                          push += 1;
    97                                                           if ( first == 0 ) {   // first RHS after ':' or '|' ?
     97                                                          if ( first == 0 ) {              // first RHS after ':' or '|' ?
    9898                                                                  cout << i->getComment(); // ignore rhs but print its comment, if any
    9999                                                          } // if
     
    101101                                                  } else if ( i->getText() == "pop" ) {
    102102                                                          pop += 1;
    103                                                           if ( first == 0 ) {   // first RHS after ':' or '|' ?
     103                                                          if ( first == 0 ) {              // first RHS after ':' or '|' ?
    104104                                                                  cout << i->getComment(); // ignore rhs but print its comment, if any
    105105                                                          } // if
     
    107107                                                  } // if
    108108                                          } // if
    109                                           // If there is a comment or this is the first RHS after
    110                                           // ':' or '|', then include the whitespace before the
    111                                           // token. Otherwise, fold the token onto the same line
    112                                           // separated with a blank.
     109                                          // If there is a comment or this is the first RHS after ':' or '|', then include the whitespace
     110                                          // before the token. Otherwise, fold the token onto the same line separated with a blank.
    113111                                          string t1( i->getText() );
    114112                                          if ( i->isComment() || first == 0 ) {
     
    128126                          break;
    129127                  }
    130                   case _LITERALBLOCK:                           // ignore code but print its comment, if any
     128                  case _LITERALBLOCK:                                                   // ignore code but print its comment, if any
    131129                        cout << tree->down->getComment();
    132130                        break;
    133                   case _DECLARATION: {                          // ignore certain declarations
    134                           int kind = tree->down->getKind();             // get kind of declaration
     131                  case _DECLARATION: {                                                  // ignore certain declarations
     132                          int kind = tree->down->getKind();                     // get kind of declaration
    135133                          if ( kind != UNION && kind != TYPE ) {
    136134                                  declprt = true;
    137                                   Nocode( tree->down );                 // print verbatim
    138                           } else if ( declprt ) {                       // ignore declaration but print its comment, if any
     135                                  Nocode( tree->down );                                 // print verbatim
     136                          } else if ( declprt ) {                                       // ignore declaration but print its comment, if any
    139137                                  declprt = false;
    140138                                  cout << tree->down->getComment();
     
    142140                          break;
    143141                  }
    144                   case _USERSECTION_OPT:                        // ignore but add newline at the end
     142                  case _USERSECTION_OPT:                                                // ignore but add newline at the end
    145143                        cout << endl;
    146144                        break;
     
    153151
    154152
    155 void LaTeX( Token *tree ) {                             // prefix tree traversal
    156         if ( tree == NULL ) return;
    157 
    158         if ( tree->isTerminal() ) {                             // terminals
     153void LaTeX( Token * tree ) {                                                    // prefix tree traversal
     154        if ( tree == NULL ) return;
     155
     156        if ( tree->isTerminal() ) {                                                     // terminals
    159157                cout << tree->getWS() << tree->getText();
    160158                if ( tree->getKind() == IDENTIFIER ) {
     
    162160                        cout << "\\(\\index{" << id << "@\\protect\\LGbegin\\protect\\lgrinde\\)" << id << "\\(\\protect\\endlgrinde\\protect\\LGend{}}\\)";
    163161                } // if
    164         } else {                                                // non-terminals
     162        } else {                                                                                        // non-terminals
    165163                switch ( tree->getKind() ) {
    166164                  case _RHS: {
    167                           int first = 0;                                // first RHS after ':' or '|' treated specially
     165                          int first = 0;                                                        // first RHS after ':' or '|' treated specially
    168166                          int push = 0, pop = 0;
    169                           for ( Token *i = tree->down; i != 0; i = i->left ) {
     167                          for ( Token * i = tree->down; i != 0; i = i->left ) {
    170168                                  switch ( i->getKind() ) {
    171169                                        case _ACTION:
     
    173171                                          break;
    174172                                        case _PREC:
    175                                           LaTeX( i->down );                     // print verbatim
    176                                           break;
    177                                         case '|':                               // start of alternative and special case
     173                                          LaTeX( i->down );                                     // print verbatim
     174                                          break;
     175                                        case '|':                                                       // start of alternative and special case
    178176                                          first = 0;
    179177                                          push = pop = 0;
    180                                         case ';':                               // print with whitespace
     178                                        case ';':                                                       // print with whitespace
    181179                                          cout << i->getWS() << i->getText();
    182180                                          break;
     
    191189                                                  } // if
    192190                                          } // if
    193                                           // If there is a comment or this is the first RHS after
    194                                           // ':' or '|', then include the whitespace before the
    195                                           // token. Otherwise, fold the token onto the same line
    196                                           // separated with a blank.
     191                                          // If there is a comment or this is the first RHS after ':' or '|', then include the whitespace
     192                                          // before the token. Otherwise, fold the token onto the same line separated with a blank.
    197193                                          string t1( i->getText() );
    198194                                          if ( i->isComment() || first == 0 ) {
     
    216212                          break;
    217213                  }
    218                   case _LITERALBLOCK:                           // ignore code but print its comment, if any
     214                  case _LITERALBLOCK:                                                   // ignore code but print its comment, if any
    219215                        cout << tree->down->getComment();
    220216                        break;
    221                   case _DECLARATION: {                          // ignore certain declarations
    222                           int kind = tree->down->getKind();     // get kind of declaration
     217                  case _DECLARATION: {                                                  // ignore certain declarations
     218                          int kind = tree->down->getKind();                     // get kind of declaration
    223219                          if ( kind != UNION && kind != TYPE ) {
    224                                   LaTeX( tree->down );          // print verbatim
     220                                  LaTeX( tree->down );                                  // print verbatim
    225221                          } // if
    226222                          break;
    227223                  }
    228                   case _USERSECTION_OPT:                        // ignore but add newline at the end
     224                  case _USERSECTION_OPT:                                                // ignore but add newline at the end
    229225                        cout << endl;
    230226                        break;
     
    237233
    238234
    239 void HTML( Token *tree ) {                              // prefix tree traversal
     235void HTML( Token * tree ) {                                                             // prefix tree traversal
    240236        cerr << "ERROR: html style not implemented" << endl;
    241237} // HTML
  • tools/prettyprinter/filter.h

    rc89503c rc9383ee  
    1010// Created On       : Tue Apr  9 22:31:18 2002
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun 28 22:57:04 2017
    13 // Update Count     : 9
     12// Last Modified On : Thu Jun 29 08:28:32 2017
     13// Update Count     : 10
    1414//
    1515
     
    1919#include "parser.hh"
    2020
    21 extern void (*filter)( Token *tree );                   // pointer to filter for parse tree
    22 void freeTree( Token *tree );                           // free storage for parse tree
     21extern void (* filter)( Token * tree );                                 // pointer to filter for parse tree
     22void freeTree( Token * tree );                                                  // free storage for parse tree
    2323
    24 void Identity( Token *tree );                           // parse-tree filters
    25 void Parse_Tree( Token *tree );
    26 void Nocode( Token *tree );
    27 void LaTeX( Token *tree );
    28 void HTML( Token *tree );
     24void Identity( Token * tree );                                                  // parse-tree filters
     25void Parse_Tree( Token * tree );
     26void Nocode( Token * tree );
     27void LaTeX( Token * tree );
     28void HTML( Token * tree );
    2929
    3030#endif // __FILTER_H__
  • tools/prettyprinter/main.cc

    rc89503c rc9383ee  
    1010// Created On       : Wed Jun 28 22:57:26 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun 28 22:58:40 2017
    13 // Update Count     : 3
     12// Last Modified On : Thu Jun 29 09:02:37 2017
     13// Update Count     : 15
    1414//
    1515
    1616#include <iostream>
     17#include <fstream>
    1718#include <string>
    1819using namespace std;
     20#include <unistd.h>                                                                             // close
    1921#include "filter.h"
    2022
     23extern FILE * yyin;
     24extern int yylineno;
    2125extern int yydebug;
    2226extern int yyparse( void );
    2327
    2428int main( int argc, char *argv[] ) {
    25         switch ( argc ) {
    26           case 2: {
    27                   string arg( argv[1] );
     29        yyin = stdin;
     30        filter = Nocode;
    2831
    29                   if ( arg == "-identity" ) {
    30                           filter = Identity;
    31                   } else if ( arg == "-parse_tree" ) {
    32                           filter = Parse_Tree;
    33                   } else if ( arg == "-nocode" ) {
    34                           filter = Nocode;
    35                   } else if ( arg == "-latex" ) {
    36                           filter = LaTeX;
    37                   } else if ( arg == "-html" ) {
    38                           filter = HTML;
    39                   } else {
    40                           cerr << "Unknown printer option: " << argv[1] << endl;
    41                           goto usage;
    42                   } // if
    43                   break;
    44           }
    45           usage:
    46           default:
    47                 cerr << "Usage: " << argv[0] << " [-identity | -parse_tree | -nocode | -latex | -html] < bison.y" << endl;
    48                 exit( -1 );
    49         }
     32        try {
     33                switch ( argc ) {
     34                  case 3:
     35                        yyin = fopen( argv[ 2 ], "r" );
     36                        if ( yyin == nullptr ) {
     37                                throw ios_base::failure( "unknown printer option arguments" );
     38                        } // if
     39                        // FALL THROUGH
     40                  case 2: {
     41                          string arg( argv[1] );
     42
     43                          if ( arg == "-identity" ) {
     44                                  filter = Identity;
     45                          } else if ( arg == "-parse_tree" ) {
     46                                  filter = Parse_Tree;
     47                          } else if ( arg == "-nocode" ) {
     48                                  filter = Nocode;
     49                          } else if ( arg == "-latex" ) {
     50                                  filter = LaTeX;
     51                          } else if ( arg == "-html" ) {
     52                                  filter = HTML;
     53                          } else {
     54                                  throw ios_base::failure( "unknown printer option arguments" );
     55                          } // if
     56                          break;
     57                  }
     58                  default:
     59                        throw ios_base::failure( "wrong number of arguments" );
     60                } // switch
     61        } catch( ios_base::failure err ) {
     62                cerr << err.what() << endl;
     63                cerr << "Usage: [" << argv[0]
     64                         << "-identity |"
     65                         << "-parse_tree |"
     66                         << "-nocode |"
     67                         << "-latex |"
     68                         << "-html"
     69                         << "] [input-file]"
     70                         << endl;
     71                exit( EXIT_FAILURE );                                                   // TERMINATE
     72        } // try
    5073
    5174        //yydebug = 1;
    5275        yyparse();
    53 }
     76
     77        if ( yyin != stdin ) fclose( yyin );                            // close file, do not delete cin!
     78} // main
    5479
    5580// Local Variables: //
  • tools/prettyprinter/parser.yy

    rc89503c rc9383ee  
    1010// Created On       : Sat Dec 15 13:44:21 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun 28 23:27:34 2017
    13 // Update Count     : 1043
     12// Last Modified On : Thu Jun 29 09:26:47 2017
     13// Update Count     : 1045
    1414//
    1515
     
    233233                    $$ = $1;
    234234                }
    235 | THONG                                                                                                 // bison
     235        | THONG                                                                                         // bison
    236236        ;
    237237
     
    276276        ;
    277277
    278 namenolist      : nameno
    279                         {
    280                             //cerr << "namenolist1: " << $1->text << "(" << $1 << ")" << endl;
    281                             $$ = nameliststart = $1;
    282                         }
    283                 | namenolist nameno
    284                         {
    285                             //cerr << "namenolist2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
    286                             $1->left = $2;
    287                             $$ = $2;
    288                         }
    289                 | namenolist ',' nameno
    290                         {
    291                             //cerr << "namenolist3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
    292                             $1->left = $2;
    293                             $2->left = $3;
    294                             $$ = $3;
    295                         }
    296                 ;
    297 
    298 nameno          : name
    299                         {
    300                             $$ = new Token( "nameno", _NAMENO );
    301                             $$->down = $1;
    302                         }
    303                 | name INTEGER
    304                         {
    305                             $$ = new Token( "nameno", _NAMENO );
    306                             $1->left = $2;
    307                             $$->down = $1;
    308                         }
    309                 ;
    310 
    311 namelist        : name
    312                         {
    313                             //cerr << "namelist1: " << $1->text << "(" << $1 << ")" << endl;
    314                             $$ = nameliststart = $1;
    315                         }
    316                 | namelist name
    317                         {
    318                             //cerr << "namelist2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
    319                             $1->left = $2;
    320                             $$ = $2;
    321                         }
    322                 | namelist ',' name
    323                         {
    324                             //cerr << "namelist3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
    325                             $1->left = $2;
    326                             $2->left = $3;
    327                             $$ = $3;
    328                         }
    329                 ;
    330 
    331 name            : IDENTIFIER
    332                 | CHARACTER
    333                 ;
    334 
    335 rulesection     : rules
    336                         {
    337                             //cerr << "rulesection1: " << $1->text << "(" << $1 << ")" << endl;
    338                             $$ = new Token( "rulesection", _RULESECTION );
    339                             $$->down = $1;
    340                         }
    341                 | error                                 /* no rules */
    342                         {
    343                             cerr << "no rules in the input grammar" << endl;
    344                             exit( -1 );
    345                         }
    346                 ;
     278namenolist :
     279        nameno
     280                {
     281                        //cerr << "namenolist1: " << $1->text << "(" << $1 << ")" << endl;
     282                        $$ = nameliststart = $1;
     283                }
     284        | namenolist nameno
     285                {
     286                    //cerr << "namenolist2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
     287                    $1->left = $2;
     288                    $$ = $2;
     289                }
     290        | namenolist ',' nameno
     291                {
     292                    //cerr << "namenolist3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
     293                    $1->left = $2;
     294                    $2->left = $3;
     295                    $$ = $3;
     296                }
     297        ;
     298
     299nameno :
     300        name
     301                {
     302                    $$ = new Token( "nameno", _NAMENO );
     303                    $$->down = $1;
     304                }
     305        | name INTEGER
     306                {
     307                    $$ = new Token( "nameno", _NAMENO );
     308                    $1->left = $2;
     309                    $$->down = $1;
     310                }
     311        ;
     312
     313namelist :
     314        name
     315                {
     316                    //cerr << "namelist1: " << $1->text << "(" << $1 << ")" << endl;
     317                    $$ = nameliststart = $1;
     318                }
     319        | namelist name
     320                {
     321                    //cerr << "namelist2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
     322                    $1->left = $2;
     323                    $$ = $2;
     324                }
     325        | namelist ',' name
     326                {
     327                    //cerr << "namelist3: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
     328                    $1->left = $2;
     329                    $2->left = $3;
     330                    $$ = $3;
     331                }
     332        ;
     333
     334name :
     335        IDENTIFIER
     336        | CHARACTER
     337        ;
     338
     339rulesection :
     340        rules
     341                {
     342                    //cerr << "rulesection1: " << $1->text << "(" << $1 << ")" << endl;
     343                    $$ = new Token( "rulesection", _RULESECTION );
     344                    $$->down = $1;
     345                }
     346        | error                                                                                         // no rules
     347                {
     348                        cerr << "no rules in the input grammar" << endl;
     349                        exit( -1 );
     350                }
     351        ;
    347352
    348353// These grammar rules are complex because the Yacc language is LR(2) due to the optional ';' at the end of rules. The
     
    351356// (rules, rhs) being built but only one list tail can be returned through $$ for chaining.
    352357
    353 rules           : lhs rhs
    354                         {
    355                             //cerr << "rules1: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
    356                             $$ = rulestart;
    357                         }
    358                 | lhs rhs ';'
    359                         {
    360                             //cerr << "rules2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
    361                             $2->addDownLeftTail( $3 );
    362                             $$ = rulestart;
    363                         }
    364                 ;
    365 
    366 lhs             : IDENTIFIER ':'
    367                         {
    368                             //cerr << "lhs: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
    369                             $$ = new Token( "lhs", _LHS );
    370                             //cerr << " lhs: "  << $$->text << "(" << $$ << ")" << endl;
    371                             $1->left = $2;
    372                             $$->down = $1;
    373                         }
    374                 ;
     358rules :
     359        lhs rhs
     360                {
     361                    //cerr << "rules1: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
     362                    $$ = rulestart;
     363                }
     364        | lhs rhs ';'
     365                {
     366                    //cerr << "rules2: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ") " << $3->text << "(" << $3 << ")" << endl;
     367                    $2->addDownLeftTail( $3 );
     368                    $$ = rulestart;
     369                }
     370        ;
     371
     372lhs :
     373        IDENTIFIER ':'
     374                {
     375                    //cerr << "lhs: " << $1->text << "(" << $1 << ") " << $2->text << "(" << $2 << ")" << endl;
     376                    $$ = new Token( "lhs", _LHS );
     377                    //cerr << " lhs: "  << $$->text << "(" << $$ << ")" << endl;
     378                    $1->left = $2;
     379                    $$->down = $1;
     380                }
     381        ;
    375382
    376383rhs     :
     
    479486ccode_opt :
    480487        // empty
     488                {}
    481489        | blocks
    482490        ;
  • tools/prettyprinter/token.cc

    rc89503c rc9383ee  
    1010// Created On       : Wed Jun 28 22:46:23 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jun 28 23:06:07 2017
    13 // Update Count     : 8
     12// Last Modified On : Thu Jun 29 09:33:49 2017
     13// Update Count     : 9
    1414//
    1515
     
    2020#include "filter.h"
    2121
    22 Token::Token( const string &text, int kind ) : text(text), kind(kind) {
     22Token::Token( const string & text, int kind ) : text(text), kind(kind) {
    2323        left = down = NULL;
    2424} // Token::Token
    2525
    26 Token::Token( const string &text, list<string> &ws_list, int kind ) : text(text), kind(kind) {
     26Token::Token( const string & text, list<string> & ws_list, int kind ) : text(text), kind(kind) {
    2727//    cerr << "Token3 : text \"" << text << "\"";
    2828//    for ( list<string>::iterator i = ws_list.begin(); i != ws_list.end(); i ++ ) {
     
    3636} // Token::Token
    3737
    38 void Token::addLeftTail( Token *n ) {
    39         Token *p = this;
     38void Token::addLeftTail( Token * n ) {
     39        Token * p = this;
    4040        while ( p->left != 0 ) {
    4141                p = p->left;
     
    4444} // Token::addLeftTail
    4545
    46 void Token::addDownLeftTail( Token *n ) {
     46void Token::addDownLeftTail( Token * n ) {
    4747        if ( down == 0 ) {
    4848                down = n;
Note: See TracChangeset for help on using the changeset viewer.