Diff for /loncom/homework/CAPA-converter/capaLexerDef.flex between versions 1.1 and 1.2

version 1.1, 2000/04/12 20:06:16 version 1.2, 2000/05/03 15:35:11
Line 140  extern        Problem_t         *LexiPro Line 140  extern        Problem_t         *LexiPro
 extern        Problem_t         *LastProblem_p;  extern        Problem_t         *LastProblem_p;
 int           first_run=1;  int           first_run=1;
 int           Stop_Parser;  int           Stop_Parser;
   int           scriptopen=0;
 #define  FLEX  #define  FLEX
   
 #define  YY_STACK_USED   1  /* for yy_push_state(), yy_pop_state() */  #define  YY_STACK_USED   1  /* for yy_push_state(), yy_pop_state() */
Line 378  EndLine    ([\r][\n]|[\n]) Line 379  EndLine    ([\r][\n]|[\n])
 }  }
   
 <S_COMMENT>{  <S_COMMENT>{
 ^{Spaces}"//"[^\n]*$      { LLDBUG_PRL2("[COMMENT<%s>]\n",yytext);  {EndLine}{Spaces}"//"[^\n]*$ {LLDBUG_PRL2("[COMMENT<%s>]\n",yytext);
                                         send(&yytext[2]);                                remove_delayed(); 
  send("\n");        send("%s",yytext);
                                         BEGIN S_COMMENT;         send_delayed("\n</comment>\n");
                                       }                               }
 .      { send("</comment>\n"); BEGIN S_TEXT; }  [^\n]*{EndLine}      BEGIN S_TEXT;
 }  }
   
   
 <S_TEXT>{  <S_TEXT>{
 ^{Spaces}"/LET" |  ^{Spaces}"/LET" |
 ^{Spaces}"/BEG"                  { LLDBUG_PRL1("[LET]"); Pcount = 0; init_funcstack(); BEGIN S_LET; RETURN(CAPA_LET); }     ^{Spaces}"/BEG"                  { LLDBUG_PRL1("[LET]"); Pcount = 0; BEGIN S_LET; if (!scriptopen){send("<script>\n");scriptopen=1;}
   }
 ^{Spaces}"/VERB"                 {   ^{Spaces}"/VERB"                 { 
                                    LLDBUG_PRL1("[VERBATIM]");                                     LLDBUG_PRL1("[VERBATIM]");
    Dynamic_buf = (char *)capa_malloc(sizeof(char),10);     Dynamic_buf = (char *)capa_malloc(sizeof(char),10);
Line 397  EndLine    ([\r][\n]|[\n]) Line 400  EndLine    ([\r][\n]|[\n])
    Dynamic_buf[0] = '\0';     Dynamic_buf[0] = '\0';
                                    BEGIN S_VERB;                                      BEGIN S_VERB; 
                                  }                                   }
 ^{Spaces}"/HIN"{Alpha}*{Spaces}  { LLDBUG_PRL1("[HIN]"); Current_char_p = String_buf;  BEGIN S_HINT; }  ^{Spaces}"/HIN"{Alpha}*{Spaces}  { LLDBUG_PRL1("[HIN]"); 
                                      send("<block condition=\"&hinton\">\n");
      BEGIN S_HINT; 
                                    }
 ^{Spaces}"/EXP"{Alpha}*{Spaces}  { LLDBUG_PRL1("[EXP]"); Current_char_p = String_buf;  BEGIN S_EXPLAIN; }  ^{Spaces}"/EXP"{Alpha}*{Spaces}  { LLDBUG_PRL1("[EXP]"); Current_char_p = String_buf;  BEGIN S_EXPLAIN; }
 ^{Spaces}"/IMP"{Alpha}*{Space}+  { LLDBUG_PRL1("[IMP]"); BEGIN S_IMPORT; }  ^{Spaces}"/IMP"{Alpha}*{Space}+  { LLDBUG_PRL1("[IMP]"); BEGIN S_IMPORT; }
 ^{Spaces}"/END"                  { LLDBUG_PRL1("[END]");    ^{Spaces}"/END"                  { LLDBUG_PRL1("[END]");  
Line 486  EndLine    ([\r][\n]|[\n]) Line 492  EndLine    ([\r][\n]|[\n])
 {EndLine}                     { LLDBUG_PR1("[EoL within S_TEXT]\n"); /* end of the whole text line */   {EndLine}                     { LLDBUG_PR1("[EoL within S_TEXT]\n"); /* end of the whole text line */ 
                                 RETURN(EoL); }                                  RETURN(EoL); }
 [\\]{Space}*{EndLine}         { LLDBUG_PR2("[\\EoL continue](%s)",yytext); /* continuation on next line */ }                         [\\]{Space}*{EndLine}         { LLDBUG_PR2("[\\EoL continue](%s)",yytext); /* continuation on next line */ }                       
 ^{Spaces}"//"[^\n]*{EndLine}      { LLDBUG_PRL2("[COMMENT<%s>]\n",yytext);  ^{Spaces}"//"[^\n]*$      { LLDBUG_PRL2("[COMMENT<%s>]\n",yytext);
                                         send("<comment>\n");                                          remove_delayed(); 
                                         send(&yytext[2]);                                          send("<comment>\n%s\n",yytext);
                                         BEGIN S_COMMENT;    send_delayed("</comment>\n");
    BEGIN S_COMMENT;
                                       }                                        }
   
 [^/\n\\]+$  |  [^/\n\\]+$  |
 [/]         |   [/]         | 
 [\\]                          {  yylval = (Symbol *) capa_malloc(1, sizeof(Symbol));  [\\]                          {  yylval = (Symbol *) capa_malloc(1, sizeof(Symbol));
                                 yylval->s_str = strsave(yytext);                                  yylval->s_str = strsave(yytext);
                                 LLDBUG_PR2("[TEXT_LINE<%s>]",yytext);                                  LLDBUG_PR2("[TEXT_LINE<%s>]",yytext);
         RETURN(TEXT_LINE);           //RETURN(TEXT_LINE); 
       }        }
 ([^/\n])+[/] |  ([^/\n])+[/] |
 ([^/\n])+[\\]                 { /* matches anything until a '/' or a '\' */  ([^/\n])+[\\]                 { /* matches anything until a '/' or a '\' */
                                 LLDBUG_PR2("[TEXT_LINE( )<%s>]",yytext);                                  LLDBUG_PR2("[TEXT_LINE( )<%s>]",yytext);
                                                                   
                                 yyless(yyleng-1); /* push back the last char */                                  yyless(yyleng-1); /* push back the last char */
                                 yylval = (Symbol *) capa_malloc(1, sizeof(Symbol));  
                                 yylval->s_str = strsave(yytext);  
                                   
                                 BEGIN S_TEXT;                                  BEGIN S_TEXT;
                                 RETURN(TEXT_LINE);    send(yytext);
                               }                                }
 <<EOF>>                       {   <<EOF>>                       { 
 #ifdef AVOIDYYINPUT  #ifdef AVOIDYYINPUT
Line 612  EndLine    ([\r][\n]|[\n]) Line 617  EndLine    ([\r][\n]|[\n])
                                   int    ii;                                    int    ii;
                                                                   
                                   yyless(yyleng-1);                                    yyless(yyleng-1);
                                   for(ii=0;ii<yyleng;ii++) {    send(aptr);
                                   *Current_char_p++ = *aptr++;  
                                 }                                  }
                                   [/]                            { send("/"); }
                               }  [\\]                           { send("\\"); }
 [/]                            { *Current_char_p++ = '/'; }  
 [\\]                           { *Current_char_p++ = '\\'; }  
 [\\]{Space}*[\n]               { LLDBUG_PR1("[\\CR hint explain continue]"); /* Hint and explain continuation */ }  [\\]{Space}*[\n]               { LLDBUG_PR1("[\\CR hint explain continue]"); /* Hint and explain continuation */ }
 [^/\n\\]+$                      { char  *aptr = yytext;  [^/\n\\]+$                     {char  *aptr = yytext;
                                 int    ii;                                  int    ii;
                                 for(ii=0;ii<yyleng;ii++) {   send(aptr);
                                   *Current_char_p++ = *aptr++;                                 }
                                 }  
                               }  
 }  }
 <S_HINT>{  <S_HINT>{
 {EndLine}                     {  LLDBUG_PR1("[CR hint]");  {EndLine}                     {  LLDBUG_PR1("[CR hint]");
                                  yylval = (Symbol *) capa_malloc(1, sizeof(Symbol));                                   send("\n</block>\n"); 
                 *Current_char_p++ = '\n'; *Current_char_p = '\0';                                   BEGIN S_TEXT;
                          yylval->s_str = strsave(String_buf);  
                                  BEGIN S_TEXT; RETURN(HINT_LINE);   
                               }                                }
 }  }
 <S_EXPLAIN>{  <S_EXPLAIN>{
Line 681  EndLine    ([\r][\n]|[\n]) Line 679  EndLine    ([\r][\n]|[\n])
                                          }                                           }
                                        break;                                         break;
                                 }                                  }
    printf("FIXME!Hint: %s\n",yytext);
                               }                                }
 {Space}+                      { }  {Space}+                      { }
 [)]                           {  yy_pop_state(); }  [)]                           {  yy_pop_state(); }
 }  }
   
 <S_IMPORT>{  <S_IMPORT>{
 {FileName}{Space}*             { parse_filename(yytext);    BEGIN S_SKIP; }  {FileName}{Space}*             { send("<import>%s</import>\n",yytext); BEGIN S_SKIP; }
 {Identifier}{Space}*           { parse_import_id(yytext);   BEGIN S_SKIP; }  {Identifier}{Space}*           { send("<import>$%s</import>\n",yytext);  BEGIN S_SKIP; }
 }  }
   
 <S_ANSWER>{  <S_ANSWER>{
Line 737  EndLine    ([\r][\n]|[\n]) Line 736  EndLine    ([\r][\n]|[\n])
   
 <S_VARIABLE,S_TRUE_FALSE_STMT,S_LET,S_ANSWER,S_MAP>{  <S_VARIABLE,S_TRUE_FALSE_STMT,S_LET,S_ANSWER,S_MAP>{
 {Alpha}{AlphaNum}*             { LLDBUG_PR2("[ID<%s>]",yytext);LLDBUG_PR2("[SYMB CNT=<%d>]", Symb_count);   {Alpha}{AlphaNum}*             { LLDBUG_PR2("[ID<%s>]",yytext);LLDBUG_PR2("[SYMB CNT=<%d>]", Symb_count); 
                                  /*yylval = find_identifier(yytext);*/ RETURN(IDENTIFIER);   send("$%s",yytext); 
                                }                                 }
   
 {Alpha}{AlphaNum}*{Space}*[(]  { char aline[MAX_FUNC_NAME];  {Alpha}{AlphaNum}*{Space}*[(]  { char aline[MAX_FUNC_NAME];
                                  int  i;                                             int  i;          
                                    for(i=0;i < (yyleng-1); i++) {   send("&%s",yytext);
                                      if( yytext[i] == ' ' || yytext[i] == '\t' ||    Pcount++;
                                          yytext[i] == 0   || yytext[i] == '(' )    break;  
                                      aline[i] = yytext[i];  
                                    }  
                                    aline[i] = 0;  
                                    LLDBUG_PR3("[FUNCT<%s:%d>]",aline,Func_idx);  
                             (FuncStack[Func_idx]).s_type = FUNCTION_ID;  
     (FuncStack[Func_idx]).s_name = strsave(aline); /* free it in parser() */  
    Func_idx++;  
    yyless(yyleng-1); /* <-- push back '(' char  */  
    RETURN(FUNCTION_ID);   
                                }                                 }
 {Alpha}{AlphaNum}*{Space}*[\[]  {  char aline[MAX_FUNC_NAME];  {Alpha}{AlphaNum}*{Space}*[\[]  {  char aline[MAX_FUNC_NAME];
                                    int  i;                                        int  i;   
Line 779  EndLine    ([\r][\n]|[\n]) Line 768  EndLine    ([\r][\n]|[\n])
 {Number}+[Ee]{Number}+    |  {Number}+[Ee]{Number}+    |
 {Number}+[Ee]"-"{Number}+ |  {Number}+[Ee]"-"{Number}+ |
 {Number}+"\."{Number}*    |  {Number}+"\."{Number}*    |
 "\."{Number}+             {  yylval = (Symbol *) capa_malloc(1, sizeof(Symbol)); /* *** */  "\."{Number}+             {  
                              yylval->s_real = strtod(yytext, (char **) 0);  
                              yylval->s_type = R_CONSTANT;  
                              LLDBUG_PR2("[REAL<%s>]",yytext);                               LLDBUG_PR2("[REAL<%s>]",yytext);
                              RETURN(R_CONSTANT);       send(yytext);
   }    }
   
 {Number}+                 {  yylval = (Symbol *) capa_malloc(1, sizeof(Symbol)); /* *** */  {Number}+                 {  
                              yylval->s_int = strtol(yytext, (char **) 0, 0);  
                              yylval->s_type= I_CONSTANT;  
                              LLDBUG_PR2("[INT<%s>]",yytext);                               LLDBUG_PR2("[INT<%s>]",yytext);
                              RETURN(I_CONSTANT);                               send(yytext);
   }    }
 [\(]                      { LLDBUG_PR1("[dis let ans map (]"); Pcount++; return(yytext[0]); }  [\(]                      { LLDBUG_PR1("[dis let ans map (]"); Pcount++; send(yytext); }
 [\[]                      { LLDBUG_PR1("[dis let ans map '[']");         return(yytext[0]); }  [\[]                      { LLDBUG_PR1("[dis let ans map '[']");         return(yytext[0]); }
 [\]]                      { LLDBUG_PR1("[dis let ans map ']']");         return(yytext[0]); }  [\]]                      { LLDBUG_PR1("[dis let ans map ']']");         return(yytext[0]); }
 {Space}+                  { /* LLDBUG_PR1("[SP ignored]");  Ignore Spaces */ }  {Space}+                  { /* LLDBUG_PR1("[SP ignored]");  Ignore Spaces */ }
Line 835  EndLine    ([\r][\n]|[\n]) Line 820  EndLine    ([\r][\n]|[\n])
 "&&"                { LLDBUG_PR1("[&&]"); RETURN(AND_op); }  "&&"                { LLDBUG_PR1("[&&]"); RETURN(AND_op); }
 "||"                { LLDBUG_PR1("[||]"); RETURN(OR_op);  }  "||"                { LLDBUG_PR1("[||]"); RETURN(OR_op);  }
 "//"                { if(Pcount==0) BEGIN S_SKIP;         }  "//"                { if(Pcount==0) BEGIN S_SKIP;         }
 {Operator}          { LLDBUG_PR2("[Op(%c) in VAR,TF_STMT,LET]",yytext[0]); return(yytext[0]); }  {Operator}          { LLDBUG_PR2("[Op(%c) in VAR,TF_STMT,LET]",yytext[0]); send(yytext); }
 }  }
   
   
   
 <S_VARIABLE>{  <S_VARIABLE>{
 [\)]                     { LLDBUG_PR1("[)]"); Pcount--; if(Pcount == 0)  BEGIN S_TEXT; return(yytext[0]); }  [\)]                     { LLDBUG_PR1("[)]"); Pcount--; if(Pcount == 0)  BEGIN S_TEXT; send(yytext); }
 [\\]{Space}*{EndLine}    { LLDBUG_PR2("[\\EoL continue in S_VARIABLE (DIS?)](%s)",yytext); /* continuation on next line */ }                         [\\]{Space}*{EndLine}    { LLDBUG_PR2("[\\EoL continue in S_VARIABLE (DIS?)](%s)",yytext); /* continuation on next line */ }                       
 {EndLine}                { LLDBUG_PR1("[EoL within /dis()]\n"); RETURN(EoL); }  {EndLine}                { LLDBUG_PR1("[EoL within /dis()]\n"); RETURN(EoL); }
 .                   { char warn_msg[WARN_MSG_LENGTH];   .                   { char warn_msg[WARN_MSG_LENGTH]; 
Line 888  EndLine    ([\r][\n]|[\n]) Line 873  EndLine    ([\r][\n]|[\n])
                     }                      }
 }  }
   
 <S_LET>[\)]                  { LLDBUG_PR1("[) in LET]"); Pcount--; return(yytext[0]); }  <S_LET>[\)]                  { LLDBUG_PR1("[) in LET]"); Pcount--;send(yytext); }
   
 <S_SKIP>{  <S_SKIP>{
 [^\n]+$                      {       }  [^\n]+$                      {       }
 {EndLine}                    { BEGIN S_TEXT; RETURN(EoL);  }  {EndLine}                    { BEGIN S_TEXT; }
 }  }
   
 <S_LET,S_ANSWER,S_MAP>{  <S_LET,S_ANSWER,S_MAP>{
 [\\]{Space}*{EndLine}        { LLDBUG_PR1("[\\EoL let ans map]"); /* continuation */ }  [\\]{Space}*{EndLine}        { LLDBUG_PR1("[\\EoL let ans map]"); /* continuation */ }
 {EndLine}                    { LLDBUG_PR1("[EoL END let ans map]\n"); if(Pcount == 0) BEGIN S_TEXT; RETURN(EoL); }  {EndLine}                    { LLDBUG_PR1("[EoL END let ans map]\n"); if(Pcount == 0) BEGIN S_TEXT; send(yytext); send_delayed("</script>"); }
 }  }
   
 <S_MAP>{  <S_MAP>{

Removed from v.1.1  
changed lines
  Added in v.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>