--- loncom/homework/CAPA-converter/capaLexerDef.flex 2001/01/30 21:03:25 1.7 +++ loncom/homework/CAPA-converter/capaLexerDef.flex 2001/11/15 21:42:42 1.9 @@ -124,6 +124,7 @@ int IFcurrent[MAX_FUNC_NEST]; int IFcount; WhileLoop_t WhileStack[MAX_FUNC_NEST]; /* <-- perhaps we can use linked list */ int While_idx, Wcount; +int sccount; /* Semi-colon count for MAP and RMAP */ #ifdef USE_DYNAMIC_SYMBOLS Symbol *SymbList_p; @@ -401,8 +402,7 @@ EndLine ([\r][\n]|[\n]) send("
\n"); } ^{Spaces}"/HIN"{Alpha}*{Spaces} { LLDBUG_PRL1("[HIN]"); - start_mode(MODE_BLOCK, - "condition=\"&hinton\""); + start_mode(MODE_HINT, ""); BEGIN S_HINT; } ^{Spaces}"/EXP"{Alpha}*{Spaces} { start_mode(MODE_BLOCK,"condition=&explanation"); @@ -436,7 +436,7 @@ EndLine ([\r][\n]|[\n]) BEGIN S_ANSWER; end_mode(); start_mode(MODE_ANSWER,NULL); - send("]\n",While_idx); @@ -656,50 +656,13 @@ EndLine ([\r][\n]|[\n]) } \n"); + if (!firstparam) send("\" />"); + send("\n\t{ -{Alpha}{AlphaNum}* { char *aptr; - char tmp_str[QUARTER_K],warn_msg[ONE_K]; - int ii, len; - Symbol *tmp_p; - - /*tmp_p = find_identifier(yytext);*/ - switch(tmp_p->s_type) { - case IDENTIFIER: - sprintf(warn_msg,"var %s not defined.\n", yytext); - capa_msg(MESSAGE_ERROR,warn_msg); - break; - case I_VAR: - case I_CONSTANT: - sprintf(tmp_str,"%ld",tmp_p->s_int); - len = strlen(tmp_str); - for(ii=0;ii< len;ii++) { - *Current_char_p++ = tmp_str[ii]; - } - break; - case R_VAR: - case R_CONSTANT: - sprintf(tmp_str,"%g",tmp_p->s_real); - len = strlen(tmp_str); - for(ii=0;ii< len;ii++) { - *Current_char_p++ = tmp_str[ii]; - } - break; - case S_VAR: - case S_CONSTANT: - len = strlen(tmp_p->s_str); - aptr = tmp_p->s_str; - for(ii=0;ii< len;ii++) { - *Current_char_p++ = *aptr++; - } - break; - } - printf("FIXME!Hint: %s\n",yytext); - } +{Alpha}{AlphaNum}* {send("${%s}",yytext);} {Space}+ { } [)] { yy_pop_state(); } } { -{FileName}{Space}* { end_mode();send(" /res/capa/%s \n",yytext); BEGIN S_SKIP; } +{FileName}{Space}* { end_mode();send("/res/ohiou/%s \n",yytext); BEGIN S_SKIP; } {Identifier}{Space}* { end_mode();send("$%s \n",yytext); BEGIN S_SKIP; } } @@ -738,19 +701,19 @@ EndLine ([\r][\n]|[\n]) } [Pp][Cc][Rr] | -[Hh][Gg][Rr] { if (firstparam) firstparam=0; else add_delayed("\">\n\t"); - add_delayed("\n\t"); + add_delayed(" \n\t"); - add_delayed(" \n\t"); + add_delayed(" \n\t"); - add_delayed(" \n\t"); + add_delayed(" \n\t"); dosend=1; flush_delayed(); - if (!firstparam) send("\">"); - send("\n\t \n \n\n"); } } @@ -837,7 +800,7 @@ EndLine ([\r][\n]|[\n]) { [\"] { LLDBUG_PR1("[TF,V,LET,MAP str\" ]"); Current_char_p = String_buf; - send("\""); + send("'"); yy_push_state(S_STRING); } } @@ -870,12 +833,40 @@ EndLine ([\r][\n]|[\n]) end_delayed(); send("&format("); flush_delayed(); - send(",\"%s\")",yytext+1); + send(",'%s')",yytext+1); } [:]{Number}+[EeFf] { if (dosend) send("\" format=\"%s",yytext+1); } + { +[;] { + if (sccount==0) { + send(",[\\"); + sccount++; + } else if (sccount==1) { + send("],["); + sccount++; + } + } +[,] { + if (sccount==1) { + send(",\\"); + } else { + send(","); + } + } +[\)] { + LLDBUG_PR1("[) in MAP]"); Pcount--; + if(Pcount==0) { + BEGIN S_SKIP; + } + /* you might need a ; in the string below */ + send("]%c;\n",yytext[0]); + sccount=0; + } +} + { "==" { LLDBUG_PR1("[==]"); send(yytext); } "!=" { LLDBUG_PR1("[!=]"); send(yytext); } @@ -931,7 +922,7 @@ EndLine ([\r][\n]|[\n]) [\\][\"] { /**Current_char_p++ = '"';*/ send("\\\""); } [\\]{Space}*[\n] { LLDBUG_PR2("[\\CR continue in S_STRING](%s)",yytext); /* continuation on next line */ } [\"] { /* end of a string constant -- */ - send("\""); + send("'"); yy_pop_state(); } {EndLine} { /* check for termination of string constant */ @@ -995,16 +986,6 @@ EndLine ([\r][\n]|[\n]) } } - { -[;,] { LLDBUG_PR2("[%c]",yytext[0]); send("%c",yytext[0]); } -[\)] { LLDBUG_PR1("[) in MAP]"); Pcount--; - if(Pcount==0) { - BEGIN S_SKIP; - } - send("%c",yytext[0]); - } -} - { {Space}+ { /* ignore white spaces */ } [\\]{Space}*{EndLine} { /* continuation */ }