Ignore:
Timestamp:
Aug 29, 2017, 5:40:44 PM (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:
9ed4f94
Parents:
6454949
Message:

add %precedence operator precedence

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/prettyprinter/lex.ll

    r6454949 rfc1ef62  
    77 * lex.ll --
    88 *
    9  * Author           : Rodolfo Gabriel Esteves
     9 * Author           : Peter A. Buhr
    1010 * Created On       : Sat Dec 15 11:45:59 2001
    1111 * Last Modified By : Peter A. Buhr
    12  * Last Modified On : Fri Jul 21 23:06:16 2017
    13  * Update Count     : 254
     12 * Last Modified On : Tue Aug 29 17:33:36 2017
     13 * Update Count     : 268
    1414 */
    1515
    1616%option stack
    1717%option yylineno
     18%option nounput
    1819
    1920%{
     
    3031string comment_str;
    3132string code_str;
     33
     34// Stop warning due to incorrectly generated flex code.
     35#pragma GCC diagnostic ignored "-Wsign-compare"
    3236%}
    3337
     
    4448/* ---------------------------- Token Section ---------------------------- */
    4549%%
    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                         }
     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}
    8678
    87 ";"                     { RETURN_TOKEN( ';' ) }
    88 ":"                     { RETURN_TOKEN( ':' ) }
    89 "|"                     { RETURN_TOKEN( '|' ) }
    90 ","                     { RETURN_TOKEN( ',' ) }
    91 "<"                     { RETURN_TOKEN( '<' ) }
    92 ">"                     { RETURN_TOKEN( '>' ) }
     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}
    9391
    94 [[:space:]]+            {                               /* [ \t\n]+ */
    95                             ws_list.push_back( yytext );
    96                             //cerr << "WS : " << "\"" << yytext << "\"" << endl;
    97                         }
     92";"                             { RETURN_TOKEN( ';' ) }
     93":"                             { RETURN_TOKEN( ':' ) }
     94"|"                             { RETURN_TOKEN( '|' ) }
     95","                             { RETURN_TOKEN( ',' ) }
     96"<"                             { RETURN_TOKEN( '<' ) }
     97">"                             { RETURN_TOKEN( '>' ) }
    9898
    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                         }
     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}
    115120
    116121"%%"                    { RETURN_TOKEN( MARK ) }
    117122"%{"                    { RETURN_TOKEN( LCURL ) }
    118 <C_CODE>"%}"            { RETURN_TOKEN( RCURL ) }
     123<C_CODE>"%}"    { RETURN_TOKEN( RCURL ) }
    119124
    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 ) }
     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 ) }
    130136^"%thong"               { RETURN_TOKEN( THONG ) }
    131137
    132138"%prec"                 { RETURN_TOKEN( PREC ) }
    133139
    134 {integer}               { RETURN_TOKEN( INTEGER ); }
    135 [']{c_char}[']          { RETURN_TOKEN( CHARACTER ); }
    136 {identifier}            { RETURN_TOKEN( IDENTIFIER ); }
     140{integer}           { RETURN_TOKEN( INTEGER ); }
     141[']{c_char}[']  { RETURN_TOKEN( CHARACTER ); }
     142{identifier}    { RETURN_TOKEN( IDENTIFIER ); }
    137143
    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                         }
     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}
    144150
    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                         }
     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}
    151157
    152 .                       { printf("UNKNOWN CHARACTER:%s\n", yytext); } /* unknown characters */
     158                                /* unknown characters */
     159.                               { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
    153160%%
    154161void lexC(void) {
Note: See TracChangeset for help on using the changeset viewer.