/[ascend]/trunk/tcltk98/generic/interface/typelex.l
ViewVC logotype

Diff of /trunk/tcltk98/generic/interface/typelex.l

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

revision 385 by aw0a, Tue Dec 7 17:37:58 2004 UTC revision 386 by johnpye, Thu Mar 30 04:46:48 2006 UTC
# Line 68  Line 68 
68  static const char TyperID[] = "$Id: typelex.l,v 1.20 2003/08/23 18:43:09 ballan Exp $";  static const char TyperID[] = "$Id: typelex.l,v 1.20 2003/08/23 18:43:09 ballan Exp $";
69  #endif  #endif
70    
71  #define YY_BREAK  #define ZZ_BREAK
72  /*  /*
73   *  Defining yybreak as above (empty) means that all of our matches must end   *  Defining zzbreak as above (empty) means that all of our matches must end
74   *  in break or return because the normal flex supplied yybreak will   *  in break or return because the normal flex supplied zzbreak will
75   *  be preempted by our empty one.   *  be preempted by our empty one.
76   *  In cases where matches contain a conditional return, make sure a   *  In cases where matches contain a conditional return, make sure a
77   *  break follows in the failure case.   *  break follows in the failure case.
# Line 110  static int ShowComments = 0; Line 110  static int ShowComments = 0;
110    
111  static unsigned long StartId = 0;  static unsigned long StartId = 0;
112  /*  /*
113   *  The location in the `yytext' array where the MODEL, ATOM, or CONSTANT   *  The location in the `zztext' array where the MODEL, ATOM, or CONSTANT
114   *  identifierbegins.  We save this value and call yymore() when we find   *  identifierbegins.  We save this value and call zzmore() when we find
115   *  a MODEL, ATOM, or CONSTANT keyword; StartId tells us where the   *  a MODEL, ATOM, or CONSTANT keyword; StartId tells us where the
116   *  Identifier will go.   *  Identifier will go.
117   */   */
# Line 122  static char *reqType = ""; Line 122  static char *reqType = "";
122   *  to Asc_ExtractType() in the argv vector.   *  to Asc_ExtractType() in the argv vector.
123   */   */
124    
125  static Tcl_Interp *g_yy_interp;  static Tcl_Interp *g_zz_interp;
126  /* during parse, set to caller's interp if string result is wanted  /* during parse, set to caller's interp if string result is wanted
127   * instead of file.   * instead of file.
128   */   */
# Line 181  constant   CONSTANT{ws}+ Line 181  constant   CONSTANT{ws}+
181                    BEGIN(Comment);                    BEGIN(Comment);
182                    CommentNestLevel = 1;                    CommentNestLevel = 1;
183                    if( ShowComments && MatchedToken!=NONE ) {                    if( ShowComments && MatchedToken!=NONE ) {
184                      Asc_PutCode( yytext, yyout );                      Asc_PutCode( zztext, zzout );
185                    }                    }
186                    break;                    break;
187                  }                  }
# Line 195  constant   CONSTANT{ws}+ Line 195  constant   CONSTANT{ws}+
195                     */                     */
196                    CommentNestLevel++;                    CommentNestLevel++;
197                    if( ShowComments && MatchedToken!=NONE ) {                    if( ShowComments && MatchedToken!=NONE ) {
198                      Asc_PutCode( yytext, yyout );                      Asc_PutCode( zztext, zzout );
199                    }                    }
200                    break;                    break;
201                  }                  }
# Line 218  constant   CONSTANT{ws}+ Line 218  constant   CONSTANT{ws}+
218                                      break;                                      break;
219                                    }                                    }
220                                    if( ShowComments ) {                                    if( ShowComments ) {
221                                      Asc_PutCode( yytext, yyout );                                      Asc_PutCode( zztext, zzout );
222                                    }                                    }
223                                    switch( MatchedToken ) {                                    switch( MatchedToken ) {
224                                    case MODEL:                                    case MODEL:
# Line 246  constant   CONSTANT{ws}+ Line 246  constant   CONSTANT{ws}+
246                                     *  MatchedToken is not NONE                                     *  MatchedToken is not NONE
247                     */                     */
248                    if( ShowComments && MatchedToken!=NONE ) {                    if( ShowComments && MatchedToken!=NONE ) {
249                      Asc_PutCode( yytext, yyout );                      Asc_PutCode( zztext, zzout );
250                    }                    }
251                    break;                    break;
252                  }                  }
# Line 271  constant   CONSTANT{ws}+ Line 271  constant   CONSTANT{ws}+
271                    BEGIN(BracedText);                    BEGIN(BracedText);
272                    BracesNestLevel = 1;                    BracesNestLevel = 1;
273                    if( MatchedToken != NONE ) {                    if( MatchedToken != NONE ) {
274                      Asc_PutCode( yytext, yyout );                      Asc_PutCode( zztext, zzout );
275                    }                    }
276                    break;                    break;
277                  }                  }
# Line 283  constant   CONSTANT{ws}+ Line 283  constant   CONSTANT{ws}+
283                     *  Print if MatchedToken is not NONE.                     *  Print if MatchedToken is not NONE.
284                     */                     */
285                    if( MatchedToken != NONE ) {                    if( MatchedToken != NONE ) {
286                      Asc_PutCode( yytext, yyout );                      Asc_PutCode( zztext, zzout );
287                    }                    }
288                    break;                    break;
289                  }                  }
# Line 295  constant   CONSTANT{ws}+ Line 295  constant   CONSTANT{ws}+
295                     *  Print if MatchedToken is not NONE.                     *  Print if MatchedToken is not NONE.
296                     */                     */
297                    if( MatchedToken != NONE ) {                    if( MatchedToken != NONE ) {
298                      Asc_PutCode( yytext, yyout );                      Asc_PutCode( zztext, zzout );
299                    }                    }
300                    break;                    break;
301                  }                  }
# Line 308  constant   CONSTANT{ws}+ Line 308  constant   CONSTANT{ws}+
308                     */                     */
309                    BracesNestLevel++;                    BracesNestLevel++;
310                    if( MatchedToken != NONE ) {                    if( MatchedToken != NONE ) {
311                      Asc_PutCode( yytext, yyout );                      Asc_PutCode( zztext, zzout );
312                    }                    }
313                    break;                    break;
314                  }                  }
# Line 329  constant   CONSTANT{ws}+ Line 329  constant   CONSTANT{ws}+
329                                      BEGIN(INITIAL);                                      BEGIN(INITIAL);
330                                      break;                                      break;
331                                    }                                    }
332                                    Asc_PutCode( yytext, yyout );                                    Asc_PutCode( zztext, zzout );
333                                    switch( MatchedToken ) {                                    switch( MatchedToken ) {
334                    case MODEL:                    case MODEL:
335                                      BEGIN(Model);                                      BEGIN(Model);
# Line 350  constant   CONSTANT{ws}+ Line 350  constant   CONSTANT{ws}+
350                     *  Print if MatchedToken is not NONE.                     *  Print if MatchedToken is not NONE.
351                     */                     */
352                    if( MatchedToken != NONE ) {                    if( MatchedToken != NONE ) {
353                      Asc_PutCode( yytext, yyout );                      Asc_PutCode( zztext, zzout );
354                    }                    }
355                    break;                    break;
356                  }                  }
# Line 385  constant   CONSTANT{ws}+ Line 385  constant   CONSTANT{ws}+
385                       *  text and see if matches reqType, if                       *  text and see if matches reqType, if
386                       *  so, we're at the end of the MODEL                       *  so, we're at the end of the MODEL
387                       *  (or ATOM or DEFINITION)                       *  (or ATOM or DEFINITION)
388                       *  and should exit yylex()---return to                       *  and should exit zzlex()---return to
389                       *  our caller, else stay in the Model                       *  our caller, else stay in the Model
390                       *  state.                       *  state.
391                       */                       */
392                      Asc_PutCode( yytext, yyout );                      Asc_PutCode( zztext, zzout );
393                      if(strcmp((yytext+StartId),reqType) == 0) {                      if(strcmp((zztext+StartId),reqType) == 0) {
394                        return 0;                        return 0;
395                      } else {                      } else {
396                                        MatchedToken = MODEL;                                        MatchedToken = MODEL;
# Line 398  constant   CONSTANT{ws}+ Line 398  constant   CONSTANT{ws}+
398                      }                      }
399                                      break;                                      break;
400                    }                    }
401                                    if(strcmp((yytext+StartId),reqType)==0){                                    if(strcmp((zztext+StartId),reqType)==0){
402                      /*                      /*
403                       *  We're in the INITIAL state, and we                       *  We're in the INITIAL state, and we
404                       *  found the beginning of the                       *  found the beginning of the
# Line 409  constant   CONSTANT{ws}+ Line 409  constant   CONSTANT{ws}+
409                       *  appropriate State by checking                       *  appropriate State by checking
410                       *  MatchedToken.                       *  MatchedToken.
411                       */                       */
412                      Asc_PutCode( yytext, yyout );                      Asc_PutCode( zztext, zzout );
413                                      switch( MatchedToken ) {                                      switch( MatchedToken ) {
414                      case MODEL:                      case MODEL:
415                        BEGIN(Model);                        BEGIN(Model);
# Line 445  constant   CONSTANT{ws}+ Line 445  constant   CONSTANT{ws}+
445                                      BEGIN(INITIAL);                                      BEGIN(INITIAL);
446                                      break;                                      break;
447                                    }                                    }
448                                    Asc_PutCode( yytext, yyout );                                    Asc_PutCode( zztext, zzout );
449                                    switch( MatchedToken ) {                                    switch( MatchedToken ) {
450                                    case MODEL:                                    case MODEL:
451                      BEGIN(Model);                      BEGIN(Model);
# Line 468  constant   CONSTANT{ws}+ Line 468  constant   CONSTANT{ws}+
468       *       *
469       *  Once we've found the start of the matching MODEL, ATOM, or       *  Once we've found the start of the matching MODEL, ATOM, or
470           *  DEFINITION, print the text until we find the END token.           *  DEFINITION, print the text until we find the END token.
471           *  When we find END, save the current length of yytext and use           *  When we find END, save the current length of zztext and use
472           *  yymore() to append the identifier, then check the identifier           *  zzmore() to append the identifier, then check the identifier
473           *  (in the CheckID state) to see if it is what we want.  If so,           *  (in the CheckID state) to see if it is what we want.  If so,
474       *  this is the end of this MODEL, ATOM, or DEFINITION.       *  this is the end of this MODEL, ATOM, or DEFINITION.
475       */       */
# Line 477  constant   CONSTANT{ws}+ Line 477  constant   CONSTANT{ws}+
477  <Model>{end}            {  <Model>{end}            {
478                    /*                    /*
479                     *  Found the END keyword.  Save the                     *  Found the END keyword.  Save the
480                     *  current location in the yytext array,                     *  current location in the zztext array,
481                     *  then enter the CheckID state to see if                     *  then enter the CheckID state to see if
482                     *  the identifier matches what we want.                     *  the identifier matches what we want.
483                     */                     */
484                    StartId = yyleng;                    StartId = zzleng;
485                                    MatchedToken = MODEL_END;                                    MatchedToken = MODEL_END;
486                    BEGIN(CheckID);                    BEGIN(CheckID);
487                    yymore();                    zzmore();
488                    break;                    break;
489                  }                  }
490  <Model>[^({A-Z]+        |  <Model>[^({A-Z]+        |
# Line 499  constant   CONSTANT{ws}+ Line 499  constant   CONSTANT{ws}+
499                     *       semicolon or whitespace.                     *       semicolon or whitespace.
500                     *  Print the text.                     *  Print the text.
501                     */                     */
502                    Asc_PutCode( yytext, yyout );                    Asc_PutCode( zztext, zzout );
503                    break;                    break;
504                  }                  }
505    
# Line 529  constant   CONSTANT{ws}+ Line 529  constant   CONSTANT{ws}+
529                     *    -- "("s not followed by "*"s                     *    -- "("s not followed by "*"s
530                     *  Print the text.                     *  Print the text.
531                     */                     */
532                    Asc_PutCode( yytext, yyout );                    Asc_PutCode( zztext, zzout );
533                    break;                    break;
534                  }                  }
535    
# Line 538  constant   CONSTANT{ws}+ Line 538  constant   CONSTANT{ws}+
538      /*      /*
539       *  Code to look for [UNIVERSAL ]{MODEL|ATOM|CONSTANT|DEFINITION}.       *  Code to look for [UNIVERSAL ]{MODEL|ATOM|CONSTANT|DEFINITION}.
540       *       *
541       *  If we find UNIVERSAL, use yymore() to append the next       *  If we find UNIVERSAL, use zzmore() to append the next
542       *  keyword---probably MODEL, ATOM, or CONSTANT.       *  keyword---probably MODEL, ATOM, or CONSTANT.
543       *  If we find MODEL, ATOM, CONSTANT, or DEFINITION save the       *  If we find MODEL, ATOM, CONSTANT, or DEFINITION save the
544       *  current length and use yymore() to append the identifier,       *  current length and use zzmore() to append the identifier,
545       *  then check the identifier (in the CheckID state) to see if       *  then check the identifier (in the CheckID state) to see if
546       *  it is what we're looking for.       *  it is what we're looking for.
547       */       */
# Line 552  constant   CONSTANT{ws}+ Line 552  constant   CONSTANT{ws}+
552                     *  the following ATOM/MODEL/CONSTANT                     *  the following ATOM/MODEL/CONSTANT
553                     *  keyword.                     *  keyword.
554                     */                     */
555                    yymore();                    zzmore();
556                    break;                    break;
557                  }                  }
558  <INITIAL>{model}        |  <INITIAL>{model}        |
# Line 562  constant   CONSTANT{ws}+ Line 562  constant   CONSTANT{ws}+
562                     *  Found an MODEL, ATOM, or DEFINITION                     *  Found an MODEL, ATOM, or DEFINITION
563                     *  keyword--perhaps with a UNIVERSAL                     *  keyword--perhaps with a UNIVERSAL
564                     *  modifier.  Save the current location                     *  modifier.  Save the current location
565                     *  in the yytext array, then enter the                     *  in the zztext array, then enter the
566                     *  CheckID state to see if the identifier                     *  CheckID state to see if the identifier
567                                     *  matches what we want.                                     *  matches what we want.
568                     */                     */
569                    StartId = yyleng;                    StartId = zzleng;
570                    MatchedToken = MODEL;                    MatchedToken = MODEL;
571                    BEGIN(CheckID);                    BEGIN(CheckID);
572                    yymore();                    zzmore();
573                    break;                    break;
574                  }                  }
575  <INITIAL>{constant}     {  <INITIAL>{constant}     {
576                    /*                    /*
577                     *  Found a CONSTANT keyword--perhaps                     *  Found a CONSTANT keyword--perhaps
578                     *  with a UNIVERSAL modifier.  Save the                     *  with a UNIVERSAL modifier.  Save the
579                     *  current location in the yytext array,                     *  current location in the zztext array,
580                     *  then enter the CheckID state to see if                     *  then enter the CheckID state to see if
581                     *  the identifier matches what we want.                     *  the identifier matches what we want.
582                     */                     */
583                    StartId = yyleng;                    StartId = zzleng;
584                    MatchedToken = CONSTANT;                    MatchedToken = CONSTANT;
585                    BEGIN(CheckID);                    BEGIN(CheckID);
586                    yymore();                    zzmore();
587                    break;                    break;
588                  }                  }
589    
# Line 618  constant   CONSTANT{ws}+ Line 618  constant   CONSTANT{ws}+
618    
619  %%  %%
620  /*  /*
621   *  int yywrap(void);   *  int zzwrap(void);
622   *   *
623   *  This returns 1 if the scanner should stop parsing, or 0 if   *  This returns 1 if the scanner should stop parsing, or 0 if
624   *  the scanner should continue.  Flex requires this function   *  the scanner should continue.  Flex requires this function
625   *  unless the flex directive `%option noyywrap' is given, but   *  unless the flex directive `%option nozzwrap' is given, but
626   *  `%option' directives are a recent addition to flex and for   *  `%option' directives are a recent addition to flex and for
627   *  maximum portability should not be used.   *  maximum portability should not be used.
628   */   */
629  int yywrap(void)  int zzwrap(void)
630  {  {
631    return 1;    return 1;
632  }  }
# Line 656  extern int Asc_ExtractType(ClientData cd Line 656  extern int Asc_ExtractType(ClientData cd
656                             int argc, CONST84 char **argv)                             int argc, CONST84 char **argv)
657  {  {
658    int ndx = 1;   /* index into the argv array */    int ndx = 1;   /* index into the argv array */
659    int result;    /* result from yylex and value to return to caller */    int result;    /* result from zzlex and value to return to caller */
660  #ifndef TYPER_TEST  #ifndef TYPER_TEST
661    struct TypeDescription *desc=NULL;    struct TypeDescription *desc=NULL;
662    struct module_t *mod=NULL;    struct module_t *mod=NULL;
# Line 751  extern int Asc_ExtractType(ClientData cd Line 751  extern int Asc_ExtractType(ClientData cd
751        }        }
752      }      }
753  #endif /*!typertest*/  #endif /*!typertest*/
754      if(scanstring == NULL && (yyin = fopen(argv[ndx],"r")) == NULL) {      if(scanstring == NULL && (zzin = fopen(argv[ndx],"r")) == NULL) {
755  #ifdef TYPER_TEST  #ifdef TYPER_TEST
756        FPRINTF(ASCERR, "Error opening source file \'%s\'\n", argv[ndx]);        FPRINTF(ASCERR, "Error opening source file \'%s\'\n", argv[ndx]);
757        return 2;        return 2;
# Line 763  extern int Asc_ExtractType(ClientData cd Line 763  extern int Asc_ExtractType(ClientData cd
763      }      }
764      ndx++;      ndx++;
765    } else {    } else {
766      yyin = stdin;      zzin = stdin;
767    }    }
768    
769    if( argc > ndx ) {    if( argc > ndx ) {
770  #ifndef TYPER_TEST  #ifndef TYPER_TEST
771      if (argv[ndx][0] == '-' && argv[ndx][1] == 's') {      if (argv[ndx][0] == '-' && argv[ndx][1] == 's') {
772        g_yy_interp = interp;        g_zz_interp = interp;
773        yyout = NULL;        zzout = NULL;
774      } else {      } else {
775  #endif /* !typertest*/  #endif /* !typertest*/
776        g_yy_interp = NULL;        g_zz_interp = NULL;
777        /*  The destination file; stdout if not specified  */        /*  The destination file; stdout if not specified  */
778        if((yyout = fopen(argv[ndx],"a+")) == NULL) {        if((zzout = fopen(argv[ndx],"a+")) == NULL) {
779  #ifdef TYPER_TEST  #ifdef TYPER_TEST
780          FPRINTF(ASCERR, "Error opening destination file \'%s\'\n", argv[ndx]);          FPRINTF(ASCERR, "Error opening destination file \'%s\'\n", argv[ndx]);
781          return 2;          return 2;
# Line 790  extern int Asc_ExtractType(ClientData cd Line 790  extern int Asc_ExtractType(ClientData cd
790  #endif /* !typertest*/  #endif /* !typertest*/
791      ndx++;      ndx++;
792    } else {    } else {
793      yyout = stdout;      zzout = stdout;
794    }    }
795    
796    
797    /*    /*
798     *  Call yylex() to process the input     *  Call zzlex() to process the input
799     */     */
800  #ifndef TYPER_TEST  #ifndef TYPER_TEST
801    if (scanstring != NULL) {    if (scanstring != NULL) {
802      oldbuf = YY_CURRENT_BUFFER;      oldbuf = YY_CURRENT_BUFFER;
803      scanbuf = yy_scan_string(scanstring);      scanbuf = zz_scan_string(scanstring);
804      yy_switch_to_buffer(scanbuf);      zz_switch_to_buffer(scanbuf);
805      BEGIN(INITIAL);      BEGIN(INITIAL);
806      /* yyrestart((FILE *)NULL); */      /* zzrestart((FILE *)NULL); */
807    }    }
808  #else  #else
809    yyrestart(yyin);    zzrestart(zzin);
810  #endif /* !typertest */  #endif /* !typertest */
811    if( (result = yylex()) != 0 ) {    if( (result = zzlex()) != 0 ) {
812  #ifdef TYPER_TEST  #ifdef TYPER_TEST
813      FPRINTF(ASCERR, "Could not find type \'%s\'\n", reqType);      FPRINTF(ASCERR, "Could not find type \'%s\'\n", reqType);
814  #else /* ! TYPER_TEST */  #else /* ! TYPER_TEST */
815      if (g_yy_interp!=NULL) {      if (g_zz_interp!=NULL) {
816        Tcl_ResetResult(interp);        Tcl_ResetResult(interp);
817      }      }
818      Tcl_AppendResult(interp, "Could not find type \'", reqType, "\'",      Tcl_AppendResult(interp, "Could not find type \'", reqType, "\'",
# Line 821  extern int Asc_ExtractType(ClientData cd Line 821  extern int Asc_ExtractType(ClientData cd
821  #endif /* TYPER_TEST */  #endif /* TYPER_TEST */
822    } else {    } else {
823      /* add a closing semicolon and newline */      /* add a closing semicolon and newline */
824      Asc_PutCode( ";\n", yyout );      Asc_PutCode( ";\n", zzout );
825  #ifndef TYPER_TEST  #ifndef TYPER_TEST
826      result = TCL_OK;      result = TCL_OK;
827  #endif /* ! TYPER_TEST */  #endif /* ! TYPER_TEST */
# Line 832  extern int Asc_ExtractType(ClientData cd Line 832  extern int Asc_ExtractType(ClientData cd
832     */     */
833  #ifndef TYPER_TEST  #ifndef TYPER_TEST
834    if (scanstring != NULL) {    if (scanstring != NULL) {
835      yy_delete_buffer(YY_CURRENT_BUFFER);      zz_delete_buffer(YY_CURRENT_BUFFER);
836      yy_switch_to_buffer(oldbuf);      zz_switch_to_buffer(oldbuf);
837      BEGIN(INITIAL);      BEGIN(INITIAL);
838    }    }
839  #endif  #endif
840    if ( yyin != stdin && yyin != NULL) {    if ( zzin != stdin && zzin != NULL) {
841      fclose(yyin);      fclose(zzin);
842    }    }
843    if ( yyout != stdout && yyout != NULL) {    if ( zzout != stdout && zzout != NULL) {
844      fclose(yyout);      fclose(zzout);
845    }    }
846    
847    return result;    return result;
# Line 850  extern int Asc_ExtractType(ClientData cd Line 850  extern int Asc_ExtractType(ClientData cd
850  void Asc_PutCode(char *s,FILE *fp)  void Asc_PutCode(char *s,FILE *fp)
851  {  {
852  #ifndef TYPER_TEST  #ifndef TYPER_TEST
853    if (g_yy_interp != NULL) {    if (g_zz_interp != NULL) {
854      Tcl_AppendResult(g_yy_interp,s,(char *)NULL);      Tcl_AppendResult(g_zz_interp,s,(char *)NULL);
855    } else {    } else {
856  #endif /* typertest */  #endif /* typertest */
857      fputs(s,fp);      fputs(s,fp);

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

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