Changeset 2bf04b in git for old_modgen/modgen/scanner.l


Ignore:
Timestamp:
Nov 12, 2015, 2:39:46 PM (8 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', '6e5adcba05493683b94648c659a729c189812c77')
Children:
6da2d6765f8866f8426131bf3a097a5c051e956e
Parents:
412c61b77c65fd4adca8f6576d7f1a597459552e
Message:
format
File:
1 edited

Legend:

Unmodified
Added
Removed
  • old_modgen/modgen/scanner.l

    r412c61 r2bf04b  
    153153<COMMENT,COMMENTB,STRING,INITIAL><<EOF>>   {
    154154          printf( "EOF encountered inside an action\n");
    155           printf("ERRRRROOOOORRR\n");
     155          printf("ERRRRROOOOORRR\n");
    156156                 }
    157157
     
    224224        ^"/*"      push_state(YYSTATE, COMMENT, "COMMENT"); yymore();
    225225        "//".*{NL} ++yylineno; ACTION_ECHO;
    226         {BOOL}  { if(yyleng == 1) sscanf(yytext, "%d", &lvalp->i);
    227                   else {
    228                     if(strcasecmp(yytext, "yes")==0) lvalp->i = 1;
    229                     else lvalp->i = 0;
     226        {BOOL}  { if(yyleng == 1) sscanf(yytext, "%d", &lvalp->i);
     227                  else {
     228                    if(strcasecmp(yytext, "yes")==0) lvalp->i = 1;
     229                    else lvalp->i = 0;
    230230                  }
    231231                  return BOOLTOK; }
    232         ^"%{".*{NL} {
    233                 yylineno++;
    234                 push_state(YYSTATE, CODEBLOCK, "CODEBLOCK");
    235                 fprintf(module_def.fmtfp, "#line %d \"%s\"\n",
    236                                           yylineno, module_def.filename);
    237                 }
    238         ^"%modinitial".*{NL} {
    239                 yylineno++;
    240                 push_state(YYSTATE, MODINITIAL, "MODINITIAL");
    241                 fprintf(module_def.fmtfp, "#line %d \"%s\"\n",
    242                                           yylineno, module_def.filename);
    243                 }
    244         {WS}            /* discard */
     232        ^"%{".*{NL} {
     233                yylineno++;
     234                push_state(YYSTATE, CODEBLOCK, "CODEBLOCK");
     235                fprintf(module_def.fmtfp, "#line %d \"%s\"\n",
     236                                          yylineno, module_def.filename);
     237                }
     238        ^"%modinitial".*{NL} {
     239                yylineno++;
     240                push_state(YYSTATE, MODINITIAL, "MODINITIAL");
     241                fprintf(module_def.fmtfp, "#line %d \"%s\"\n",
     242                                                 yylineno, module_def.filename);
     243                }
     244        {WS}            /* discard */
    245245        {NL}    { yylineno++; }
    246246
     
    254254                }
    255255
    256         ^{NAME} {
    257                   lvalp->name = strdup(yytext);
     256        ^{NAME} {
     257                  lvalp->name = strdup(yytext);
    258258                  return NAME;
    259259                }
    260         {FILENAME} {
    261                   lvalp->name = strdup(yytext);
     260        {FILENAME} {
     261                  lvalp->name = strdup(yytext);
    262262                  return FILENAME;
    263263                }
    264            }
     264           }
    265265
    266266<CODEBLOCK>{
     
    269269
    270270                   yylineno++;
    271                    pop_state();
    272                    s = t = lvalp->name = dupyytext();
    273                    while (*yytext)
    274                    {
    275                      if (*yytext == '\\') yytext++;
    276                      *s++ = *yytext++;
    277                    }
    278                    if(s-t>2 && *(s-1)=='}' && *(s-2)=='%') *(s-2)='\0';
    279                    return MCCODETOK;
     271                   pop_state();
     272                   s = t = lvalp->name = dupyytext();
     273                   while (*yytext)
     274                   {
     275                     if (*yytext == '\\') yytext++;
     276                     *s++ = *yytext++;
     277                   }
     278                   if(s-t>2 && *(s-1)=='}' && *(s-2)=='%') *(s-2)='\0';
     279                   return MCCODETOK;
    280280                 }
    281281         {NL}    { yylineno++; yymore(); }
     
    284284<MODINITIAL>{
    285285           ^"%endinitial".*{NL} {
    286                    yylineno++;
    287                    pop_state();
     286                   yylineno++;
     287                   pop_state();
    288288                 }
    289289           .*{NL}  { yylineno++;
    290                    lvalp->name = yytext;
    291                    return CODEPART; }
     290                   lvalp->name = yytext;
     291                   return CODEPART; }
    292292       }
    293293<STRING>{
     
    299299                    char * s, *t;
    300300                    pop_state();
    301                     if(do_return) {
     301                    if(do_return) {
    302302                      s = t = lvalp->sv.string = dupyytext();
    303303                      while (*yytext)
     
    306306                        *s++ = *yytext++;
    307307                      }
    308                       *s++ = *yytext++;
    309                       do_return = 0;
    310                       return MSTRINGTOK;
     308                      *s++ = *yytext++;
     309                      do_return = 0;
     310                      return MSTRINGTOK;
    311311                    } else {
    312                       do_return = 0;
     312                      do_return = 0;
    313313                      yymore();
    314314                    }
    315                   }
    316         }
     315                  }
     316        }
    317317
    318318<COMMENT>{
     
    321321        {NL}          { yylineno++; yymore(); }
    322322        .             { yymore(); }
    323           }
     323          }
    324324
    325325<SECT2>{
     
    333333                  brace2 = 0; /* ( */
    334334                  brace3 = 0; /* [ */
    335                   push_state(YYSTATE, PROCDECL, "PROCDECL");
    336                   return PROCDECLTOK;
     335                  push_state(YYSTATE, PROCDECL, "PROCDECL");
     336                  return PROCDECLTOK;
    337337                }
    338338        example {
    339339#if DEBUG > 1
    340                   printf(">>>EXAMPLE\n");
     340                  printf(">>>EXAMPLE\n");
    341341#endif
    342342                  brace1 = 0; /* { */
    343343                  brace2 = 0; /* ( */
    344344                  brace3 = 0; /* [ */
    345                     push_state(YYSTATE, EXAMPLE, "EXAMPLE");
    346                         return EXAMPLETOK;
    347                 }
    348             static  { return STATICTOK; }
     345                    push_state(YYSTATE, EXAMPLE, "EXAMPLE");
     346                        return EXAMPLETOK;
     347                }
     348             static  { return STATICTOK; }
    349349        .       { printf("SG(%d) <<<'%s' ", yylineno, yytext); }
    350350       }
     
    358358        example {
    359359#if DEBUG > 1
    360                   printf(">>>EXAMPLE\n");
     360                  printf(">>>EXAMPLE\n");
    361361#endif
    362362                  brace1 = 0; /* { */
    363363                  brace2 = 0; /* ( */
    364364                  brace3 = 0; /* [ */
    365                   push_state(YYSTATE, EXAMPLE, "EXAMPLE");
    366                   return EXAMPLETOK;
    367                 }
    368         static  { return STATICTOK; }
    369         {NAME}  {
    370                    int i,tok;
     365                  push_state(YYSTATE, EXAMPLE, "EXAMPLE");
     366                  return EXAMPLETOK;
     367                }
     368        static  { return STATICTOK; }
     369        {NAME}  {
     370                   int i,tok;
    371371#if DEBUG > 1
    372                    printf("(%d) VAR: %s\n", yylineno, yytext);
    373 #endif
    374                    i = IsCmd(yytext, tok);
     372                   printf("(%d) VAR: %s\n", yylineno, yytext);
     373#endif
     374                   i = IsCmd(yytext, tok);
    375375#if DEBUG > 1
    376                    printf("Res=%d, %d => %s\n", i, tok,
    377                           i ? "VARTYPETOK" : "NAME");
    378 #endif
    379                    if(i) {
    380                      lvalp->tp.name = strdup(yytext);
    381                      lvalp->tp.typ = tok;
    382                      push_state(YYSTATE, PROCDECL, "PROCDECL");
    383                      return VARTYPETOK;
    384                    }
    385                    else {
    386                      //do_return++;
    387                      lvalp->name = strdup(yytext);
    388                      push_state(YYSTATE, PROCDECL, "PROCDECL");
    389                      return NAME;
    390                    }
     376                   printf("Res=%d, %d => %s\n", i, tok,
     377                          i ? "VARTYPETOK" : "NAME");
     378#endif
     379                   if(i) {
     380                     lvalp->tp.name = strdup(yytext);
     381                     lvalp->tp.typ = tok;
     382                     push_state(YYSTATE, PROCDECL, "PROCDECL");
     383                     return VARTYPETOK;
     384                   }
     385                   else {
     386                     //do_return++;
     387                     lvalp->name = strdup(yytext);
     388                     push_state(YYSTATE, PROCDECL, "PROCDECL");
     389                     return NAME;
     390                   }
    391391                 }
    392392        .       { printf("PR(%d) <<<'%s' ", yylineno, yytext); }
     
    397397        {WS}    /* ignore */
    398398        "{"     { brace1++;
    399                   switch_state(YYSTATE, CODEBLOCK2, "CODEBLOCK2");
    400                   return '{';
    401                 }
     399                  switch_state(YYSTATE, CODEBLOCK2, "CODEBLOCK2");
     400                  return '{';
     401                }
    402402        .       { printf("ERROR <<<'%s' ", yytext); }
    403403}
     
    406406        {NL}    { yylineno++; }
    407407        .*(\n?) { lvalp->name = yytext;
    408                   return CODEPART; }
     408                  return CODEPART; }
    409409
    410410        <<EOF>>  { sectnum = 0;
    411                    iseof=1;
    412                    lvalp->name = yytext;
    413                    return SECT4END;
     411                   iseof=1;
     412                   lvalp->name = yytext;
     413                   return SECT4END;
    414414                   /* yyterminate(); */
    415415                 }
     
    418418<PROCDECL>{
    419419         "{"     { brace1++;
    420                    switch_state(YYSTATE, CODEBLOCK2, "CODEBLOCK2");
    421                    return '{';
    422                 }
     420                   switch_state(YYSTATE, CODEBLOCK2, "CODEBLOCK2");
     421                   return '{';
     422                }
    423423         "/*"       push_state(YYSTATE, COMMENT, "COMMENT");yymore();
    424424         "//".*{NL}  ++yylineno; ACTION_ECHO;
    425425         "\""    { do_return++;
    426                    lvalp->sv.lineno = yylineno;
     426                   lvalp->sv.lineno = yylineno;
    427427                   push_state(YYSTATE, STRING, "string");
    428428                 }
    429         {BOOL}  { if(yyleng == 1) sscanf(yytext, "%d", &lvalp->i);
    430                    else {
    431                      if(strcasecmp(yytext, "yes")==0) lvalp->i = 1;
    432                      else lvalp->i = 0;
     429        {BOOL}  { if(yyleng == 1) sscanf(yytext, "%d", &lvalp->i);
     430                   else {
     431                     if(strcasecmp(yytext, "yes")==0) lvalp->i = 1;
     432                     else lvalp->i = 0;
    433433                   }
    434434                   return BOOLTOK; }
    435         {NUMBER} { sscanf(yytext, "%d", &lvalp->i); return NUMTOK; }
    436         {NAME}  {
    437                    int i,tok;
     435        {NUMBER} { sscanf(yytext, "%d", &lvalp->i); return NUMTOK; }
     436        {NAME}  {
     437                   int i,tok;
    438438#if DEBUG > 1
    439                    printf("(%d) VAR: %s\n", yylineno, yytext);
    440 #endif
    441                    i = IsCmd(yytext, tok);
     439                   printf("(%d) VAR: %s\n", yylineno, yytext);
     440#endif
     441                   i = IsCmd(yytext, tok);
    442442#if DEBUG > 1
    443                    printf("Res=%d, %d => %s\n", i, tok,
    444                           i ? "VARTYPETOK" : "NAME");
    445 #endif
    446                    if(i) {
    447                      lvalp->tp.name = strdup(yytext);
    448                      lvalp->tp.typ = tok;
    449                      return VARTYPETOK;
    450                    }
    451                    else {
    452                      //do_return++;
    453                      lvalp->name = strdup(yytext);
    454                      return NAME;
    455                    }
     443                   printf("Res=%d, %d => %s\n", i, tok,
     444                          i ? "VARTYPETOK" : "NAME");
     445#endif
     446                   if(i) {
     447                     lvalp->tp.name = strdup(yytext);
     448                     lvalp->tp.typ = tok;
     449                     return VARTYPETOK;
     450                   }
     451                   else {
     452                     //do_return++;
     453                     lvalp->name = strdup(yytext);
     454                     return NAME;
     455                   }
    456456                 }
    457457         {NL}    { yylineno++; }
    458         "("     { return '('; }
    459         ")"     { return ')'; }
    460         ","     { return ','; }
    461         "#"     { return '#'; }
    462         "="     { return '='; }
    463         ";"     { return ';'; }
     458        "("     { return '('; }
     459        ")"     { return ')'; }
     460        ","     { return ','; }
     461        "#"     { return '#'; }
     462        "="     { return '='; }
     463        ";"     { return ';'; }
    464464         .       { }
    465465
     
    471471                        lvalp->name = yytext;
    472472                        return CMTPART;
    473                         yymore();
     473                        yymore();
    474474                      }
    475475        "*"           yymore();
    476476        {NL}          { yylineno++; yymore(); }
    477477        .             { yymore(); }
    478           }
     478          }
    479479
    480480<CODEBLOCK2>{
     
    482482         "//".*{NL} { yylineno++; lvalp->name = yytext; return CODEPART; }
    483483         "\""    {
    484                    lvalp->sv.lineno = yylineno;
     484                   lvalp->sv.lineno = yylineno;
    485485                   push_state(YYSTATE, STRING, "string"); yymore();}
    486486         "{"     { brace1++; yymore();}
     
    489489                     char * s, *t;
    490490
    491                      pop_state();
     491                     pop_state();
    492492#if 0
    493                      s = t = lvalp->name = dupyytext();
    494                      while (*yytext)
    495                      {
    496                        if (*yytext == '\\') yytext++;
    497                        *s++ = *yytext++;
    498                      }
    499                      if(s-t>2 && *(s-1)=='}' && *(s-2)=='%') *(s-2)='\0';
     493                     s = t = lvalp->name = dupyytext();
     494                     while (*yytext)
     495                     {
     496                       if (*yytext == '\\') yytext++;
     497                       *s++ = *yytext++;
     498                     }
     499                     if(s-t>2 && *(s-1)=='}' && *(s-2)=='%') *(s-2)='\0';
    500500#else
    501501                     lvalp->name = yytext;
     
    504504                     printf("2 BRACE DOWN=%d\n", brace1);
    505505#endif
    506                      return MCODETOK;
     506                     return MCODETOK;
    507507                   } else {
    508508                     yymore();
    509                    }
     509                   }
    510510                 }
    511511         {NL}    { yylineno++; lvalp->name = yytext; return CODEPART; }
    512         "%" { push_state(YYSTATE, PROCCMDBLOCK, "PROCCMDBLOCK");
     512        "%" { push_state(YYSTATE, PROCCMDBLOCK, "PROCCMDBLOCK");
    513513               procedure_decl.flags.start_of_code = 1;
    514514               return '%'; }
     
    520520<PROCCMDBLOCK>{
    521521       {col}  { pop_state(); return ';'; }
    522         "("   { return '('; }
    523         ")"   { return ')'; }
    524         ","   { return ','; }
     522        "("   { return '('; }
     523        ")"   { return ')'; }
     524        ","   { return ','; }
    525525       {WS}   /* ignore */
    526526       {NAME} { lvalp->name = strdup(yytext); return NAME; }
Note: See TracChangeset for help on using the changeset viewer.