[LON-CAPA-cvs] cvs: loncom /homework/CAPA-converter capaLexerDef.flex
albertel
lon-capa-cvs@mail.lon-capa.org
Thu, 12 Sep 2002 15:54:07 -0000
This is a MIME encoded message
--albertel1031846047
Content-Type: text/plain
albertel Thu Sep 12 11:54:07 2002 EDT
Modified files:
/loncom/homework/CAPA-converter capaLexerDef.flex
Log:
- From Mark Lucas,
Fixes a few things with /DIS in scripts, eval with fml,
braces around variables.
--albertel1031846047
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20020912115407.txt"
Index: loncom/homework/CAPA-converter/capaLexerDef.flex
diff -u loncom/homework/CAPA-converter/capaLexerDef.flex:1.20 loncom/homework/CAPA-converter/capaLexerDef.flex:1.21
--- loncom/homework/CAPA-converter/capaLexerDef.flex:1.20 Wed Mar 20 13:19:59 2002
+++ loncom/homework/CAPA-converter/capaLexerDef.flex Thu Sep 12 11:54:06 2002
@@ -1,6 +1,6 @@
/* The LearningOnline Network with CAPA
* CAPA lexer dfinition, heavily modified to become a LON-CAPA convertor
- * $Id: capaLexerDef.flex,v 1.20 2002/03/20 18:19:59 albertel Exp $
+ * $Id: capaLexerDef.flex,v 1.21 2002/09/12 15:54:06 albertel Exp $
*
* Copyright Michigan State University Board of Trustees
*
@@ -152,6 +152,9 @@
int sccount; /* Semi-colon count for MAP and RMAP */
int HINTflag=0;
int EXPflag=0;
+int EVALflag=0;
+int compound_answer=0;
+int essay_answer=0;
#ifdef USE_DYNAMIC_SYMBOLS
Symbol *SymbList_p;
@@ -244,7 +247,7 @@
} \
Input_idx = 0; \
first_run=0; \
- yyin = Input_stream[Input_idx]; LIDBUG_PR1("<<yy_input() startup>>\n"); \
+yyin = Input_stream[Input_idx]; LIDBUG_PR1("<<yy_input() startup>>\n"); \
} \
out_of_char = 0; \
if ( Lexi_buf[Input_idx] == NULL ) { \
@@ -435,6 +438,7 @@
HINTflag=-1;
}
change_destination(HINT_DEST);
+ send("\t",NULL);
BEGIN S_HINT;
}
^{Spaces}"/EXP"{Alpha}*{Spaces} {
@@ -443,6 +447,7 @@
EXPflag=-1;
}
change_destination(EXP_DEST);
+ send("\t",NULL);
LLDBUG_PRL1("[EXP]"); Current_char_p = String_buf; BEGIN S_EXPLAIN; }
^{Spaces}"/IMP"{Alpha}*{Space}+ { LLDBUG_PRL1("[IMP]"); BEGIN S_IMPORT; end_mode(); }
^{Spaces}"/END" { LLDBUG_PRL1("[END]");
@@ -476,15 +481,19 @@
send("<numericalresponse answer=\"");
dosend=1;
firstparam=1;
+ compound_answer=0;
+ essay_answer=0;
}
^{Spaces}"/SUBJECTIVE" { LLDBUG_PRL1("[SUBJECTIVE ANSWER]");
Pcount = 0;
BEGIN S_ANSWER;
end_mode();
start_mode(MODE_ANSWER,NULL);
- send("<capasubjectiveresponse");
+ send("<essayresponse");
dosend=1;
firstparam=1;
+ compound_answer=0;
+ essay_answer=-1;
}
^{Spaces}"/MAP" { LLDBUG_PRL1("[MAP]"); Pcount = 0; sccount = 0; BEGIN S_MAP; start_mode(MODE_SCRIPT,NULL);send("&map("); }
^{Spaces}"/RMAP" { LLDBUG_PRL1("[RMAP]"); Pcount = 0; sccount = 0; BEGIN S_MAP; start_mode(MODE_SCRIPT,NULL);send("&rmap("); }
@@ -569,15 +578,15 @@
delete_cache();
LLDBUG_PRL2("[ENDIF <IFcount=%d>]\n",IFcount);
}
-"/AND" { LLDBUG_PRL1("[AND]"); /*implict in LON-CAPA*/}
"/DIS" { /* since S_VARIABLE treat {Space} as null, so here we do not match ( */
/* so that between /DIS and ( can have as many {Space} as we want */
+ start_mode(MODE_OUTTEXT,NULL);
LLDBUG_PR1("[DIS<]");
init_funcstack();
Pcount = 0; BEGIN S_VARIABLE;
+ send("<display>");
start_delayed();
}
-"/OR" { LLDBUG_PRL1("[OR]"); BEGIN S_ANSCONTINUE; RETURN(ANS_OR); }
{EndLine} { LLDBUG_PR1("[EoL within S_TEXT]\n"); /* end of the whole text line */
send("\n"); }
[\\]{Space}*{EndLine} { LLDBUG_PR2("[\\EoL continue](%s)",yytext); /* continuation on next line */ }
@@ -707,7 +716,7 @@
}
[/] { send("/"); }
[\\] { send("\\"); }
-[\\]{Space}*[\n] { LLDBUG_PR1("[\\CR hint explain continue]"); /* Hint and explain continuation */ }
+[\\]{Space}*[\n] { LLDBUG_PR1("[\\CR hint explain continue]"); /* Hint and explain continuation */ send("\n\t");}
[^/\n\\]+$ {char *aptr = yytext;
send(aptr);
}
@@ -734,7 +743,8 @@
}
<S_IMPORT>{
-{FileName}{Space}* { char *endquote;
+{FileName}{Space}* {
+ char *endquote;
end_mode();
start_mode(MODE_IMPORT,NULL);
/* Get rid of leading and trailing quotes */
@@ -750,7 +760,7 @@
}
{Identifier}{Space}* { end_mode();
start_mode(MODE_IMPORT,NULL);
- send("$%s",yytext);
+ send("${%s}",yytext);
end_mode();
BEGIN S_SKIP;
}
@@ -782,12 +792,18 @@
if (dosend==2) add_delayed("%s",yytext);
}
"<" { LLDBUG_PR2("[symbol(%s)]",yytext);
+ if (!EVALflag) {
if (dosend==1) send("%s",yytext);
if (dosend==2) add_delayed("%s",yytext);
}
+ }
">" { LLDBUG_PR2("[symbol(%s)]",yytext);
+ if (!EVALflag) {
if (dosend==1) send("%s",yytext);
if (dosend==2) add_delayed("%s",yytext);
+ } else {
+ EVALflag = 0;
+ }
}
[Pp][Cc][Rr] |
@@ -821,7 +837,7 @@
[Ss][Tt][Rr] { LLDBUG_PR1("[STR]"); send("\" type=\""); dosend=1; }
[Ee][Vv][Aa][Ll] |
-[Ee][Vv][Aa][Ll][Uu][Aa][Tt][Ee] { LLDBUG_PR1("[EVAL]");send("\" eval="); dosend=1;}
+[Ee][Vv][Aa][Ll][Uu][Aa][Tt][Ee] { LLDBUG_PR1("[EVAL]");send("\" eval=\""); EVALflag=1; dosend=1;}
[Uu][Nn][Ii][Tt] |
[Uu][Nn][Ii][Tt][Ss] { LLDBUG_PR1("[UNIT]"); send("\" unit=\""); dosend=1;}
@@ -842,25 +858,44 @@
if(Pcount==0) {
BEGIN S_ANSCONTINUE;
}
+ if (essay_answer) {
+ send(">\n\t");
+ } else {
send("\">\n\t");
+ }
dosend=1;
flush_delayed();
if (firstparam!=1) send("\" />\n");
+ if (essay_answer) {
+ send(" <textfield>Enter your answer here.</textfield>\n");
+ } else {
send("\t<textline />\n");
+ }
/* Fill in Hints */
if ( !is_dest_empty(HINT_DEST) ) {
- send("<hintgroup>\n\t<hintpart on=\"default\">\n\t<startouttext />");
+ send("\t<hintgroup>\n\t<hintpart on=\"default\">\n\t<startouttext />");
end_streams(HINT_DEST,0);
HINTflag=0;
- send("\t<endouttext />\n\t</hintpart>\n</hintgroup>\n");
+ send("\t<endouttext />\n\t</hintpart>\n\t</hintgroup>\n");
+ }
+ if (essay_answer) {
+ send("</essayresponse>\n");
+ } else {
+ send("</numericalresponse>\n");
}
- send("\n</numericalresponse>\n");
- if ( !is_dest_empty(EXP_DEST) ) {
- send("<postanswerdate>\n\t<startouttext />\n");
- end_streams(EXP_DEST,0);
- EXPflag=0;
- send("\t<endouttext />\n</postanswerdate>\n");
+ }
+}
+
+<S_VARIABLE>{
+{Alpha}{AlphaNum}* { LLDBUG_PR2("[ID<%s>]",yytext);
+ LLDBUG_PR2("[SYMB CNT=<%d>]", Symb_count);
+ if(Pcount <= 1) {
+ if (dosend==1) send("${%s}",yytext);
+ if (dosend==2) add_delayed("${%s}",yytext);
+ } else {
+ if (dosend==1) send("$%s",yytext);
+ if (dosend==2) add_delayed("$%s",yytext);
}
}
}
@@ -878,7 +913,6 @@
}
{Alpha}{AlphaNum}*{Space}*[\[] {
LLDBUG_PR2("[ARRAY<%s>]",yytext);
-
yyless(yyleng-1); /*<-- push back char '[' */
if (dosend==1) send("$%s",yytext);
if (dosend==2) add_delayed("$%s",yytext);
@@ -980,9 +1014,13 @@
}
}
+<S_VARIABLE>{
+"+" { send(".");}
+}
+
<S_VARIABLE,S_TRUE_FALSE_STMT,S_LET,S_MAP>{
-"==" { LLDBUG_PR1("[==]"); send(yytext); }
-"!=" { LLDBUG_PR1("[!=]"); send(yytext); }
+"==" { LLDBUG_PR1("[==]"); send(" eq "); }
+"!=" { LLDBUG_PR1("[!=]"); send(" ne "); }
">" { LLDBUG_PR1("[>]"); send(yytext); }
">=" { LLDBUG_PR1("[>=]"); send(yytext); }
"<" { LLDBUG_PR1("[<]"); send(yytext); }
@@ -1004,6 +1042,7 @@
[\)] { LLDBUG_PR1("[)]");
Pcount--;
if(Pcount == 0) {
+ send("</display>");
BEGIN S_TEXT;
flush_delayed();
} else {
@@ -1027,6 +1066,9 @@
send_stream(0,"\">\n");
send_stream(1,") {\n");
BEGIN S_NEXT_LINE;
+ } else {
+ send_stream(0,")");
+ send_stream(1,")");
}
}
[\\]{Space}*{EndLine} {
@@ -1056,6 +1098,9 @@
[%] { /*Escape percent signs so that vasprintf doesn't choke */
send("%%");
}
+[\'] { /* Escape single quotes so that perl doesn't choke */
+ send("\\\'");
+ }
{EndLine} { /* check for termination of string constant */
char warn_msg[WARN_MSG_LENGTH];
@@ -1118,12 +1163,45 @@
}
<S_ANSCONTINUE>{
-{Space}+ { /* ignore white spaces */ }
-[\\]{Space}*{EndLine} { /* continuation */ }
-{EndLine} { /* end of answer and/or other answers */ LLDBUG_PR1("[complete an answer<EoL>]");
- BEGIN S_TEXT; }
-"/AND" { LLDBUG_PR1("[AND]"); /* implicit in LON-CAPA */ }
-"/OR" { LLDBUG_PR1("[OR]"); RETURN(ANS_OR); }
+{Spaces}{EndLine}{Spaces}"/AND" { LLDBUG_PR1("[AND]");
+ compound_answer=-1;
+ /* implicit in LON-CAPA */ }
+{Spaces}{EndLine}{Spaces}"/OR" { LLDBUG_PR1("[OR]");
+ compound_answer=-1;
+ /*RETURN(ANS_OR); */ }
+{Spaces}{EndLine}{Spaces}"/ANS" { LLDBUG_PRL2("[ANS(%s)]",yytext);
+ Pcount = 0;
+ BEGIN S_ANSWER;
+ end_mode();
+ if (!compound_answer) {
+ if ( !is_dest_empty(EXP_DEST) ) {
+ send("<postanswerdate>\n\t<startouttext />\n");
+ end_streams(EXP_DEST,0);
+ EXPflag=0;
+ send("\t<endouttext />\n</postanswerdate>\n");
+ }
+ send("</part>\n<part>\n");
+ }
+ start_mode(MODE_ANSWER,NULL);
+ send("<numericalresponse answer=\"");
+ dosend=1;
+ firstparam=1;
+ compound_answer=0;
+ essay_answer=0;
+ }
+{Spaces}{EndLine} {
+/* end of answer and/or other answers */
+ LLDBUG_PR1("[complete an answer<EoL>]");
+ if ( !is_dest_empty(EXP_DEST) ) {
+ send("<postanswerdate>\n\t<startouttext />\n");
+ end_streams(EXP_DEST,0);
+ EXPflag=0;
+ send("\t<endouttext />\n</postanswerdate>\n");
+ }
+ send("</part>\n<part>\n");
+ BEGIN S_TEXT;
+ }
+{Spaces} { /* Do nothing */ }
}
<S_NEXT_LINE>{
--albertel1031846047--