/[ascend]/trunk/base/generic/compiler/scanner.l
ViewVC logotype

Diff of /trunk/base/generic/compiler/scanner.l

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 384 by johnpye, Wed Mar 1 00:51:23 2006 UTC revision 385 by johnpye, Thu Mar 30 04:14:29 2006 UTC
# Line 73  Line 73 
73   *  WORKBUF_INIT_SIZE is the initial size of g_workbuf   *  WORKBUF_INIT_SIZE is the initial size of g_workbuf
74   */   */
75    
76  static unsigned long zz_line = 1;  static unsigned long yy_line = 1;
77  /*  The current line number;  /*  The current line number;
78   *  every match of newline (\n) needs to ++ this variable.   *  every match of newline (\n) needs to ++ this variable.
79   */   */
# Line 297  IDChar       {letter}({integer}|{letter} Line 297  IDChar       {letter}({integer}|{letter}
297                     */                     */
298                    BEGIN (Comment);                    BEGIN (Comment);
299                    CommentNestLevel = 1;                    CommentNestLevel = 1;
300                    start_line = zz_line;                    start_line = yy_line;
301                    break;                    break;
302                  }                  }
303  <Comment>\(\*[^*(\n]*       {  <Comment>\(\*[^*(\n]*       {
# Line 313  IDChar       {letter}({integer}|{letter} Line 313  IDChar       {letter}({integer}|{letter}
313                     *  anything that's not "(" nor "*".                     *  anything that's not "(" nor "*".
314                     *  Increase the commment nesting level.                     *  Increase the commment nesting level.
315                     */                     */
316                    zz_line++;                    yy_line++;
317                    CommentNestLevel++;                    CommentNestLevel++;
318                    break;                    break;
319                  }                  }
# Line 339  IDChar       {letter}({integer}|{letter} Line 339  IDChar       {letter}({integer}|{letter}
339                     *  that is followed by a newline.                     *  that is followed by a newline.
340                     *  This rule also matches empty line.                     *  This rule also matches empty line.
341                     */                     */
342                    zz_line++;                    yy_line++;
343                    break;                    break;
344                  }                  }
345  <Comment>\(+[^*(\n]*        {  <Comment>\(+[^*(\n]*        {
# Line 350  IDChar       {letter}({integer}|{letter} Line 350  IDChar       {letter}({integer}|{letter}
350  <Comment>\(+[^*(\n]*\n      {  <Comment>\(+[^*(\n]*\n      {
351                    /*  Eat "("s not followed by "*" plus a "\n"                    /*  Eat "("s not followed by "*" plus a "\n"
352                     */                     */
353                    zz_line++;                    yy_line++;
354                    break;                    break;
355                  }                  }
356  <Comment>\*+[^*()\n]*       {  <Comment>\*+[^*()\n]*       {
# Line 361  IDChar       {letter}({integer}|{letter} Line 361  IDChar       {letter}({integer}|{letter}
361  <Comment>\*+[^*()\n]*\n     {  <Comment>\*+[^*()\n]*\n     {
362                    /*  Eat "*" not followed by ")" plus a "\n"                    /*  Eat "*" not followed by ")" plus a "\n"
363                     */                     */
364                    zz_line++;                    yy_line++;
365                    break;                    break;
366                  }                  }
367  <Comment><<EOF>>        {  <Comment><<EOF>>        {
# Line 404  IDChar       {letter}({integer}|{letter} Line 404  IDChar       {letter}({integer}|{letter}
404                    /*  strip off the final (')                    /*  strip off the final (')
405                     */                     */
406                    yytext[--yyleng] = '\0';                    yytext[--yyleng] = '\0';
407                    if (yyleng > ZZ_MAXLEN) {                    if (yyleng > YY_MAXLEN) {
408                      ErrMsg_LongSymbol();                      ErrMsg_LongSymbol();
409                      break;                      break;
410                    }                    }
411                    zz_lval.sym_ptr = AddSymbolL(yytext,yyleng);                    yylval.sym_ptr = AddSymbolL(yytext,yyleng);
412                    return SYMBOL_T;                    return SYMBOL_T;
413                  }                  }
414  <Symbol>[^'\n]*\n       {  <Symbol>[^'\n]*\n       {
# Line 417  IDChar       {letter}({integer}|{letter} Line 417  IDChar       {letter}({integer}|{letter}
417                     *  message and return to the INITIAL state.                     *  message and return to the INITIAL state.
418                     */                     */
419                    ErrMsg_SymbolEOL();                    ErrMsg_SymbolEOL();
420                    zz_line++;                    yy_line++;
421                    BEGIN(INITIAL);                    BEGIN(INITIAL);
422                    break;                    break;
423                  }                  }
# Line 456  IDChar       {letter}({integer}|{letter} Line 456  IDChar       {letter}({integer}|{letter}
456                     *  number for error reporting.                     *  number for error reporting.
457                     */                     */
458                    BEGIN (DoubleQuote);                    BEGIN (DoubleQuote);
459                    start_line = zz_line;                    start_line = yy_line;
460                    break;                    break;
461                  }                  }
462  <DoubleQuote>[^\\"\n]*\\.   {  <DoubleQuote>[^\\"\n]*\\.   {
# Line 472  IDChar       {letter}({integer}|{letter} Line 472  IDChar       {letter}({integer}|{letter}
472                     *  state protects a newline.                     *  state protects a newline.
473                     */                     */
474                    MatchedBackslash++;                    MatchedBackslash++;
475                    zz_line++;                    yy_line++;
476                    yymore();                    yymore();
477                    break;                    break;
478                  }                  }
# Line 494  IDChar       {letter}({integer}|{letter} Line 494  IDChar       {letter}({integer}|{letter}
494                      Process_Backslashes();                      Process_Backslashes();
495                      MatchedBackslash = 0;                      MatchedBackslash = 0;
496                    }                    }
497                    zz_lval.dquote_ptr =                    yylval.dquote_ptr =
498                        CopyIntoWorkBuffer(yytext,yyleng);                        CopyIntoWorkBuffer(yytext,yyleng);
499                    return DQUOTE_T;                    return DQUOTE_T;
500                  }                  }
# Line 510  IDChar       {letter}({integer}|{letter} Line 510  IDChar       {letter}({integer}|{letter}
510                     *  doublequote and add it to the text.                     *  doublequote and add it to the text.
511                     *  This also matches an empty line.                     *  This also matches an empty line.
512                     */                     */
513                    zz_line++;                    yy_line++;
514                    yymore();                    yymore();
515                    break;                    break;
516                  }                  }
# Line 553  IDChar       {letter}({integer}|{letter} Line 553  IDChar       {letter}({integer}|{letter}
553                     */                     */
554                    BEGIN (BracedText);                    BEGIN (BracedText);
555                    BracesNestLevel = 1;                    BracesNestLevel = 1;
556                    start_line = zz_line;                    start_line = yy_line;
557                    zz_line++;                    yy_line++;
558                    break;                    break;
559                  }                  }
560  <INITIAL>\{         {  <INITIAL>\{         {
# Line 565  IDChar       {letter}({integer}|{letter} Line 565  IDChar       {letter}({integer}|{letter}
565                     */                     */
566                    BEGIN (BracedText);                    BEGIN (BracedText);
567                    BracesNestLevel = 1;                    BracesNestLevel = 1;
568                    start_line = zz_line;                    start_line = yy_line;
569                    break;                    break;
570                  }                  }
571  <BracedText>[^\\{}\n]*\\.   {  <BracedText>[^\\{}\n]*\\.   {
# Line 582  IDChar       {letter}({integer}|{letter} Line 582  IDChar       {letter}({integer}|{letter}
582                     *  protects a newline.                     *  protects a newline.
583                     */                     */
584                    MatchedBackslash++;                    MatchedBackslash++;
585                    zz_line++;                    yy_line++;
586                    yymore();                    yymore();
587                    break;                    break;
588                  }                  }
# Line 598  IDChar       {letter}({integer}|{letter} Line 598  IDChar       {letter}({integer}|{letter}
598                    /*  A "{" in the braces state gets added to                    /*  A "{" in the braces state gets added to
599                     *  the text and increase the nesting level.                     *  the text and increase the nesting level.
600                     */                     */
601                    zz_line++;                    yy_line++;
602                    BracesNestLevel++;                    BracesNestLevel++;
603                    yymore();                    yymore();
604                    break;                    break;
# Line 625  IDChar       {letter}({integer}|{letter} Line 625  IDChar       {letter}({integer}|{letter}
625                        Process_Backslashes();                        Process_Backslashes();
626                        MatchedBackslash = 0;                        MatchedBackslash = 0;
627                      }                      }
628                      zz_lval.braced_ptr =                      yylval.braced_ptr =
629                          CopyIntoWorkBuffer(yytext,yyleng);                          CopyIntoWorkBuffer(yytext,yyleng);
630                      return BRACEDTEXT_T;                      return BRACEDTEXT_T;
631                    }                    }
# Line 645  IDChar       {letter}({integer}|{letter} Line 645  IDChar       {letter}({integer}|{letter}
645                     *  and add it to text.                     *  and add it to text.
646                     *  This also matches an empty line.                     *  This also matches an empty line.
647                     */                     */
648                    zz_line++;                    yy_line++;
649                    yymore();                    yymore();
650                    break;                    break;
651                  }                  }
# Line 673  IDChar       {letter}({integer}|{letter} Line 673  IDChar       {letter}({integer}|{letter}
673  <INITIAL>{integer}      {  <INITIAL>{integer}      {
674                    /*  An integer.  Defn near top of file.                    /*  An integer.  Defn near top of file.
675                     */                     */
676                    zz_lval.int_value = atol(yytext);                    yylval.int_value = atol(yytext);
677                    return INTEGER_T;                    return INTEGER_T;
678                  }                  }
679    
# Line 682  IDChar       {letter}({integer}|{letter} Line 682  IDChar       {letter}({integer}|{letter}
682                     *  range (need to avoid parsing "1..2"                     *  range (need to avoid parsing "1..2"
683                     *  as the real numbers 1.0 and 0.2).                     *  as the real numbers 1.0 and 0.2).
684                     */                     */
685                    zz_lval.int_value = atol(yytext);                    yylval.int_value = atol(yytext);
686                    return INTEGER_T;                    return INTEGER_T;
687                  }                  }
688    
689  <INITIAL>{real}         {  <INITIAL>{real}         {
690                    /*  A real number.  Defn near top of file.                    /*  A real number.  Defn near top of file.
691                     */                     */
692                    zz_lval.real_value = atof(yytext);                    yylval.real_value = atof(yytext);
693                    return REAL_T;                    return REAL_T;
694                  }                  }
695    
696  <INITIAL>{IDChar}+      {  <INITIAL>{IDChar}+      {
697                    /*  An identifier.  Defn near top of file.                    /*  An identifier.  Defn near top of file.
698                     */                     */
699                    if (yyleng >ZZ_MAXLEN) {                    if (yyleng >YY_MAXLEN) {
700                      ErrMsg_LongID();                      ErrMsg_LongID();
701                      break;                      break;
702                    }                    }
703                    zz_lval.id_ptr = AddSymbolL(yytext,yyleng);                    yylval.id_ptr = AddSymbolL(yytext,yyleng);
704                    return IDENTIFIER_T;                    return IDENTIFIER_T;
705                  }                  }
706    
# Line 710  IDChar       {letter}({integer}|{letter} Line 710  IDChar       {letter}({integer}|{letter}
710                  }                  }
711  <INITIAL>{blank}*\n     {  <INITIAL>{blank}*\n     {
712                    /*  Ignore whitespace.  */                    /*  Ignore whitespace.  */
713                    zz_line++;                    yy_line++;
714                    break;                    break;
715                  }                  }
716    
# Line 739  IDChar       {letter}({integer}|{letter} Line 739  IDChar       {letter}({integer}|{letter}
739    
740  %%  %%
741  /*  /*
742   *  int zz_wrap(void);   *  int yy_wrap(void);
743   *   *
744   *  This returns 1 if the scanner should stop parsing, or   *  This returns 1 if the scanner should stop parsing, or
745   *  0 if the scanner should continue.  Flex requires this   *  0 if the scanner should continue.  Flex requires this
746   *  function unless %option noyywrap is defined.   *  function unless %option noyywrap is defined.
747   */   */
748  int  int
749  zz_wrap(void)  yy_wrap(void)
750  {  {
751    return 1;    return 1;
752  }  }
# Line 758  zz_wrap(void) Line 758  zz_wrap(void)
758  unsigned long  unsigned long
759  LineNum(void)  LineNum(void)
760  {  {
761    return zz_line;    return yy_line;
762  }  }
763    
764    
# Line 769  void Line 769  void
769  Asc_ScannerAssignFile(FILE *f, unsigned long linenum)  Asc_ScannerAssignFile(FILE *f, unsigned long linenum)
770  {  {
771    yyin = f;    yyin = f;
772    zz_line = linenum;    yy_line = linenum;
773    if ( RequireIndex == 0 ) {    if ( RequireIndex == 0 ) {
774      yyrestart(f);      yyrestart(f);
775    }    }
# Line 782  void Line 782  void
782  Asc_ScannerAssignString(void *yybs, unsigned long linenum, int first)  Asc_ScannerAssignString(void *yybs, unsigned long linenum, int first)
783  {  {
784    /* yyin = f; */    /* yyin = f; */
785    zz_line = linenum;    yy_line = linenum;
786    yy_switch_to_buffer((YY_BUFFER_STATE)yybs);    yy_switch_to_buffer((YY_BUFFER_STATE)yybs);
787    if (first) {    if (first) {
788      BEGIN(INITIAL);      BEGIN(INITIAL);
# Line 807  Asc_ScannerPushBuffer(CONST char *filena Line 807  Asc_ScannerPushBuffer(CONST char *filena
807          "\tFile \"%s\" not read.\n",          "\tFile \"%s\" not read.\n",
808          RequireIndex,          RequireIndex,
809          Asc_ModuleBestName(Asc_CurrentModule()),          Asc_ModuleBestName(Asc_CurrentModule()),
810          zz_line,          yy_line,
811          filename);          filename);
812      return 1;      return 1;
813    }    }
# Line 841  Asc_ScannerPushBuffer(CONST char *filena Line 841  Asc_ScannerPushBuffer(CONST char *filena
841          "Error:\tREQUIRE cannot open module \"%s\" on line %s:%lu\n",          "Error:\tREQUIRE cannot open module \"%s\" on line %s:%lu\n",
842          filename,          filename,
843          Asc_ModuleBestName(Asc_CurrentModule()),          Asc_ModuleBestName(Asc_CurrentModule()),
844          zz_line);          yy_line);
845      return 2;      return 2;
846    }    }
847    
# Line 851  Asc_ScannerPushBuffer(CONST char *filena Line 851  Asc_ScannerPushBuffer(CONST char *filena
851     * REQUIREd.     * REQUIREd.
852     */     */
853    Asc_FPrintf(stderr,"REQUIREing file \"%s\"\n", filename);    Asc_FPrintf(stderr,"REQUIREing file \"%s\"\n", filename);
854    yy_switch_to_buffer(yy_create_buffer(zz_in,YY_BUF_SIZE));    yy_switch_to_buffer(yy_create_buffer(yyin,YY_BUF_SIZE));
855    BEGIN (INITIAL);    BEGIN (INITIAL);
856    return 0;    return 0;
857  }  }
# Line 1090  ErrMsg_LongID(void) Line 1090  ErrMsg_LongID(void)
1090        "Error:\tIdentifier too long on line %s:%lu.\n"        "Error:\tIdentifier too long on line %s:%lu.\n"
1091        "\tIdentifier \"%s\" exceeds the maximum identifier size of %d\n",        "\tIdentifier \"%s\" exceeds the maximum identifier size of %d\n",
1092        Asc_ModuleBestName(Asc_CurrentModule()),        Asc_ModuleBestName(Asc_CurrentModule()),
1093        zz_line,        yy_line,
1094        yytext,        yytext,
1095        ZZ_MAXLEN);        YY_MAXLEN);
1096  }  }
1097    
1098    
# Line 1103  ErrMsg_LongSymbol(void) Line 1103  ErrMsg_LongSymbol(void)
1103        "Error:\tSymbol too long on line %s:%lu.\n"        "Error:\tSymbol too long on line %s:%lu.\n"
1104        "\tSymbol %s exceeds the maximum symbol size of %d\n",        "\tSymbol %s exceeds the maximum symbol size of %d\n",
1105        Asc_ModuleBestName(Asc_CurrentModule()),        Asc_ModuleBestName(Asc_CurrentModule()),
1106        zz_line,        yy_line,
1107        yytext,        yytext,
1108        ZZ_MAXLEN);        YY_MAXLEN);
1109  }  }
1110    
1111    
# Line 1125  ErrMsg_SymbolEOF(void) Line 1125  ErrMsg_SymbolEOF(void)
1125    FPRINTF(ASCERR,    FPRINTF(ASCERR,
1126            "Error:\tEnd of file reached within a symbol.\n"            "Error:\tEnd of file reached within a symbol.\n"
1127        "\tNo close quote found for symbol on line %s:%lu\n",        "\tNo close quote found for symbol on line %s:%lu\n",
1128        Asc_ModuleBestName(Asc_CurrentModule()), zz_line);        Asc_ModuleBestName(Asc_CurrentModule()), yy_line);
1129  }  }
1130    
1131    
# Line 1135  ErrMsg_SymbolEOL(void) Line 1135  ErrMsg_SymbolEOL(void)
1135    FPRINTF(ASCERR,    FPRINTF(ASCERR,
1136            "Error:\tEnd of line reached within a symbol.\n"            "Error:\tEnd of line reached within a symbol.\n"
1137        "\tNo close quote found for symbol on line %s:%lu\n",        "\tNo close quote found for symbol on line %s:%lu\n",
1138        Asc_ModuleBestName(Asc_CurrentModule()), zz_line);        Asc_ModuleBestName(Asc_CurrentModule()), yy_line);
1139  }  }
1140    
1141    
# Line 1146  ErrMsg_UnexpectedChar() Line 1146  ErrMsg_UnexpectedChar()
1146        "Error:\tUnexpected character \"%s\" in input on line %s:%lu.\n",        "Error:\tUnexpected character \"%s\" in input on line %s:%lu.\n",
1147        yytext,        yytext,
1148        Asc_ModuleBestName(Asc_CurrentModule()),        Asc_ModuleBestName(Asc_CurrentModule()),
1149        zz_line);        yy_line);
1150  }  }

Legend:
Removed from v.384  
changed lines
  Added in v.385

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22