Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/prettyprinter/lex.ll

    rfc1ef62 r6b0b624  
    77 * lex.ll --
    88 *
    9  * Author           : Peter A. Buhr
     9 * Author           : Rodolfo Gabriel Esteves
    1010 * Created On       : Sat Dec 15 11:45:59 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Tue Aug 29 17:33:36 2017
    13  * Update Count     : 268
     12 * Last Modified On : Fri Jul 21 23:06:16 2017
     13 * Update Count     : 254
    1414 */
    1515
    1616%option stack
    1717%option yylineno
    18 %option nounput
    1918
    2019%{
     
    3130string comment_str;
    3231string code_str;
    33 
    34 // Stop warning due to incorrectly generated flex code.
    35 #pragma GCC diagnostic ignored "-Wsign-compare"
    3632%}
    3733
     
    4844/* ---------------------------- Token Section ---------------------------- */
    4945%%
    50 <INITIAL,C_CODE>"/*" {                                                                  // C style comments */
    51 #if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
    52     cerr << "\"/*\" : " << yytext << endl;
    53 #endif
    54     if ( YYSTATE == C_CODE ) code_str += yytext;
    55     else comment_str += yytext;
    56     yy_push_state(C_COMMENT);
    57 }
    58 <C_COMMENT>(.|"\n")     {                                                                       // C style comments
    59 #if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
    60     cerr << "<C_COMMENT>(.|\\n) : " << yytext << endl;
    61 #endif
    62     if ( yy_top_state() == C_CODE ) code_str += yytext;
    63     else comment_str += yytext;
    64 }
    65 <C_COMMENT>"*/" {                                                                               // C style comments
    66 #if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
    67         cerr << "<C_COMMENT>\"*/\" : " << yytext << endl;
    68 #endif
    69         if ( yy_top_state() == C_CODE ) code_str += yytext;
    70         else {
    71                 comment_str += yytext;
    72                 //cerr << "C COMMENT : " << endl << comment_str << endl;
    73                 ws_list.push_back( comment_str );
    74                 comment_str = "";
    75         }
    76         yy_pop_state();
    77 }
     46<INITIAL,C_CODE>"/*"    {                               /* C style comments */
     47                        #if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
     48                            cerr << "\"/*\" : " << yytext << endl;
     49                        #endif
     50                            if ( YYSTATE == C_CODE ) code_str += yytext;
     51                            else comment_str += yytext;
     52                            yy_push_state(C_COMMENT);
     53                        }
     54<C_COMMENT>(.|"\n")     {                               /* C style comments */
     55                        #if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
     56                            cerr << "<C_COMMENT>(.|\\n) : " << yytext << endl;
     57                        #endif
     58                            if ( yy_top_state() == C_CODE ) code_str += yytext;
     59                            else comment_str += yytext;
     60                        }
     61<C_COMMENT>"*/"         {                               /* C style comments */
     62                        #if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
     63                            cerr << "<C_COMMENT>\"*/\" : " << yytext << endl;
     64                        #endif
     65                            if ( yy_top_state() == C_CODE ) code_str += yytext;
     66                            else {
     67                                comment_str += yytext;
     68                                //cerr << "C COMMENT : " << endl << comment_str << endl;
     69                                ws_list.push_back( comment_str );
     70                                comment_str = "";
     71                            }
     72                            yy_pop_state();
     73                        }
     74<INITIAL,C_CODE>"//"[^\n]*"\n" {                        /* C++ style comments */
     75                        #if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
     76                            cerr << "\"//\"[^\\n]*\"\n\" : " << yytext << endl;
     77                        #endif
     78                            if ( YYSTATE == C_CODE ) code_str += yytext;
     79                            else {
     80                                comment_str += yytext;
     81                                //cerr << "C++ COMMENT : " << endl << comment_str << endl;
     82                                ws_list.push_back( comment_str );
     83                                comment_str = "";
     84                            }
     85                        }
    7886
    79 <INITIAL,C_CODE>"//"[^\n]*"\n" {                                                // C++ style comments
    80 #if defined(DEBUG_ALL) | defined(DEBUG_COMMENT)
    81         cerr << "\"//\"[^\\n]*\"\n\" : " << yytext << endl;
    82 #endif
    83         if ( YYSTATE == C_CODE ) code_str += yytext;
    84         else {
    85                 comment_str += yytext;
    86                 //cerr << "C++ COMMENT : " << endl << comment_str << endl;
    87                 ws_list.push_back( comment_str );
    88                 comment_str = "";
    89         }
    90 }
     87";"                     { RETURN_TOKEN( ';' ) }
     88":"                     { RETURN_TOKEN( ':' ) }
     89"|"                     { RETURN_TOKEN( '|' ) }
     90","                     { RETURN_TOKEN( ',' ) }
     91"<"                     { RETURN_TOKEN( '<' ) }
     92">"                     { RETURN_TOKEN( '>' ) }
    9193
    92 ";"                             { RETURN_TOKEN( ';' ) }
    93 ":"                             { RETURN_TOKEN( ':' ) }
    94 "|"                             { RETURN_TOKEN( '|' ) }
    95 ","                             { RETURN_TOKEN( ',' ) }
    96 "<"                             { RETURN_TOKEN( '<' ) }
    97 ">"                             { RETURN_TOKEN( '>' ) }
     94[[:space:]]+            {                               /* [ \t\n]+ */
     95                            ws_list.push_back( yytext );
     96                            //cerr << "WS : " << "\"" << yytext << "\"" << endl;
     97                        }
    9898
    99 [[:space:]]+ {                                                                                  // [ \t\n]+
    100         ws_list.push_back( yytext );
    101         //cerr << "WS : " << "\"" << yytext << "\"" << endl;
    102 }
    103 
    104 <INITIAL>"{"    { RETURN_TOKEN( '{' ) }
    105 <INITIAL>"}"    { RETURN_TOKEN( '}' ) }
    106 <C_CODE>"{"     {
    107 #if defined(DEBUG_ALL) | defined(DEBUG_C)
    108         cerr << "<C_CODE>. : " << yytext << endl;
    109 #endif
    110         code_str += yytext;
    111         RETURN_TOKEN( '{' )
    112 }
    113 <C_CODE>"}"     {
    114 #if defined(DEBUG_ALL) | defined(DEBUG_C)
    115         cerr << "<C_CODE>. : " << yytext << endl;
    116 #endif
    117         code_str += yytext;
    118         RETURN_TOKEN( '}' )
    119 }
     99<INITIAL>"{"            { RETURN_TOKEN( '{' ) }
     100<INITIAL>"}"            { RETURN_TOKEN( '}' ) }
     101<C_CODE>"{"             {
     102                        #if defined(DEBUG_ALL) | defined(DEBUG_C)
     103                            cerr << "<C_CODE>. : " << yytext << endl;
     104                        #endif
     105                            code_str += yytext;
     106                            RETURN_TOKEN( '{' )
     107                        }
     108<C_CODE>"}"             {
     109                        #if defined(DEBUG_ALL) | defined(DEBUG_C)
     110                            cerr << "<C_CODE>. : " << yytext << endl;
     111                        #endif
     112                            code_str += yytext;
     113                            RETURN_TOKEN( '}' )
     114                        }
    120115
    121116"%%"                    { RETURN_TOKEN( MARK ) }
    122117"%{"                    { RETURN_TOKEN( LCURL ) }
    123 <C_CODE>"%}"    { RETURN_TOKEN( RCURL ) }
     118<C_CODE>"%}"            { RETURN_TOKEN( RCURL ) }
    124119
    125 ^"%union"       { RETURN_TOKEN( UNION ) }
    126 ^"%start"       { RETURN_TOKEN( START ) }
    127 ^"%token"       { RETURN_TOKEN( TOKEN ) }
    128 ^"%type"            { RETURN_TOKEN( TYPE ) }
    129 ^"%left"            { RETURN_TOKEN( LEFT ) }
    130 ^"%right"           { RETURN_TOKEN( RIGHT ) }
    131 ^"%nonassoc"    { RETURN_TOKEN( NONASSOC ) }
    132 ^"%precedence"  { RETURN_TOKEN( PRECEDENCE ) }
    133 ^"%pure_parser" { RETURN_TOKEN( PURE_PARSER ) }
    134 ^"%semantic_parser"     { RETURN_TOKEN( SEMANTIC_PARSER ) }
    135 ^"%expect"      { RETURN_TOKEN( EXPECT ) }
     120^"%union"               { RETURN_TOKEN( UNION ) }
     121^"%start"               { RETURN_TOKEN( START ) }
     122^"%token"               { RETURN_TOKEN( TOKEN ) }
     123^"%type"                { RETURN_TOKEN( TYPE ) }
     124^"%left"                { RETURN_TOKEN( LEFT ) }
     125^"%right"               { RETURN_TOKEN( RIGHT ) }
     126^"%nonassoc"            { RETURN_TOKEN( NONASSOC ) }
     127^"%pure_parser"         { RETURN_TOKEN( PURE_PARSER ) }
     128^"%semantic_parser"     { RETURN_TOKEN( SEMANTIC_PARSER ) }
     129^"%expect"              { RETURN_TOKEN( EXPECT ) }
    136130^"%thong"               { RETURN_TOKEN( THONG ) }
    137131
    138132"%prec"                 { RETURN_TOKEN( PREC ) }
    139133
    140 {integer}           { RETURN_TOKEN( INTEGER ); }
    141 [']{c_char}[']  { RETURN_TOKEN( CHARACTER ); }
    142 {identifier}    { RETURN_TOKEN( IDENTIFIER ); }
     134{integer}               { RETURN_TOKEN( INTEGER ); }
     135[']{c_char}[']          { RETURN_TOKEN( CHARACTER ); }
     136{identifier}            { RETURN_TOKEN( IDENTIFIER ); }
    143137
    144 <C_CODE>["]{s_char}*["] {                                                               // hide braces "{}" in strings
    145 #if defined(DEBUG_ALL) | defined(DEBUG_C)
    146         cerr << "<C_CODE>. : " << yytext << endl;
    147 #endif
    148         code_str += yytext;
    149 }
     138<C_CODE>["]{s_char}*["] {                               /* hide braces "{}" in strings */
     139                        #if defined(DEBUG_ALL) | defined(DEBUG_C)
     140                            cerr << "<C_CODE>. : " << yytext << endl;
     141                        #endif
     142                            code_str += yytext;
     143                        }
    150144
    151 <C_CODE>(.|\n) {                                                                                // must be last rule of C_CODE
    152 #if defined(DEBUG_ALL) | defined(DEBUG_C)
    153         cerr << "<C_CODE>. : " << yytext << endl;
    154 #endif
    155         code_str += yytext;
    156 }
     145<C_CODE>(.|\n)          {                               /* must be last rule of C_CODE */
     146                        #if defined(DEBUG_ALL) | defined(DEBUG_C)
     147                            cerr << "<C_CODE>. : " << yytext << endl;
     148                        #endif
     149                            code_str += yytext;
     150                        }
    157151
    158                                 /* unknown characters */
    159 .                               { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
     152.                       { printf("UNKNOWN CHARACTER:%s\n", yytext); } /* unknown characters */
    160153%%
    161154void lexC(void) {
Note: See TracChangeset for help on using the changeset viewer.