version 1.14, 2001/12/04 15:17:57
|
version 1.20, 2002/03/20 18:19:59
|
Line 150 int IFcount;
|
Line 150 int IFcount;
|
WhileLoop_t WhileStack[MAX_FUNC_NEST]; /* <-- perhaps we can use linked list */ |
WhileLoop_t WhileStack[MAX_FUNC_NEST]; /* <-- perhaps we can use linked list */ |
int While_idx, Wcount; |
int While_idx, Wcount; |
int sccount; /* Semi-colon count for MAP and RMAP */ |
int sccount; /* Semi-colon count for MAP and RMAP */ |
|
int HINTflag=0; |
|
int EXPflag=0; |
|
|
#ifdef USE_DYNAMIC_SYMBOLS |
#ifdef USE_DYNAMIC_SYMBOLS |
Symbol *SymbList_p; |
Symbol *SymbList_p; |
Line 427 EndLine ([\r][\n]|[\n])
|
Line 429 EndLine ([\r][\n]|[\n])
|
send("<PRE>\n"); |
send("<PRE>\n"); |
} |
} |
^{Spaces}"/HIN"{Alpha}*{Spaces} { LLDBUG_PRL1("[HIN]"); |
^{Spaces}"/HIN"{Alpha}*{Spaces} { LLDBUG_PRL1("[HIN]"); |
start_mode(MODE_HINT, ""); |
/* start_mode(MODE_HINT, "");*/ |
|
if (!HINTflag) { |
|
start_streams(HINT_DEST,1); |
|
HINTflag=-1; |
|
} |
|
change_destination(HINT_DEST); |
BEGIN S_HINT; |
BEGIN S_HINT; |
} |
} |
^{Spaces}"/EXP"{Alpha}*{Spaces} { start_mode(MODE_BLOCK,"condition=&explanation"); |
^{Spaces}"/EXP"{Alpha}*{Spaces} { |
|
if (!EXPflag) { |
|
start_streams(EXP_DEST,1); |
|
EXPflag=-1; |
|
} |
|
change_destination(EXP_DEST); |
LLDBUG_PRL1("[EXP]"); Current_char_p = String_buf; BEGIN S_EXPLAIN; } |
LLDBUG_PRL1("[EXP]"); Current_char_p = String_buf; BEGIN S_EXPLAIN; } |
^{Spaces}"/IMP"{Alpha}*{Space}+ { LLDBUG_PRL1("[IMP]"); BEGIN S_IMPORT; end_mode(); } |
^{Spaces}"/IMP"{Alpha}*{Space}+ { LLDBUG_PRL1("[IMP]"); BEGIN S_IMPORT; end_mode(); } |
^{Spaces}"/END" { LLDBUG_PRL1("[END]"); |
^{Spaces}"/END" { LLDBUG_PRL1("[END]"); |
Line 476 EndLine ([\r][\n]|[\n])
|
Line 488 EndLine ([\r][\n]|[\n])
|
} |
} |
^{Spaces}"/MAP" { LLDBUG_PRL1("[MAP]"); Pcount = 0; sccount = 0; BEGIN S_MAP; start_mode(MODE_SCRIPT,NULL);send("&map("); } |
^{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("); } |
^{Spaces}"/RMAP" { LLDBUG_PRL1("[RMAP]"); Pcount = 0; sccount = 0; BEGIN S_MAP; start_mode(MODE_SCRIPT,NULL);send("&rmap("); } |
^{Spaces}"/ENDWHILE"([^\n])* { long int file_pos; |
^{Spaces}"/ENDWHILE"([^\n])* { |
int top_item, input_idx; |
int i; |
LLDBUG_PRL2("[ENDWHILE While_idx=<%d>]\n",While_idx); |
LLDBUG_PRL2("[ENDWHILE While_idx=<%d>]\n",IFcount); |
|
IFcount--; |
top_item = While_idx - 1; |
end_mode_stream(DEFAULT_DEST,0); |
if( top_item < 0 ) { /* strange things must have happened here! */ |
for(i=0;i<IFcount;i++) {send("\t",NULL);} |
|
send_stream(0,"</while>"); |
} else { |
send_stream(1,"}"); |
input_idx = WhileStack[top_item].input_idx; |
if (IFcount == 0) { |
file_pos = WhileStack[top_item].pos_idx; |
if (watch_mode[current_dest][1]) { |
Current_line[input_idx] = WhileStack[top_item].line_idx; |
end_streams(DEFAULT_DEST,1); |
Lexi_pos[input_idx] = 0; |
} else { |
fseek(Input_stream[input_idx],file_pos,SEEK_SET); |
end_streams(DEFAULT_DEST,0); |
fgets(Lexi_buf[input_idx],LEX_BUFLEN-1,Input_stream[input_idx]); |
} |
While_idx--; |
change_destination(DEFAULT_DEST); |
} |
} |
|
delete_cache(); |
BEGIN S_TEXT; |
BEGIN S_TEXT; |
} |
} |
"/WHILE" | |
"/WHILE" | |
^{Spaces}"/WHILE" { long int file_pos; |
^{Spaces}"/WHILE" { |
int leng; |
int i; |
LLDBUG_PRL2("[WHILE While_idx=<%d>]\n",While_idx); |
LLDBUG_PRL2("[WHILE While_idx=<%d>]\n",IFcount); |
leng = strlen(Lexi_buf[Input_idx]); /* length of current line */ |
IFcount++; /* advance the stack pointer */ |
/* <-- because we use fgets() to read input, |
BEGIN S_TRUE_FALSE_STMT; |
thus ftell() will give the starting position of next line */ |
if ( IFcount == 1) { |
WhileStack[While_idx].input_idx = Input_idx; |
start_streams(DEFAULT_DEST, 2); |
file_pos = ftell(Input_stream[Input_idx]); |
change_destination(DEFAULT_DEST); |
file_pos -= leng; /* calibrate the current line length */ |
watch_mode[current_dest][1]=1; |
WhileStack[While_idx].pos_idx = file_pos; /* begin of current line */ |
} |
WhileStack[While_idx].line_idx = Current_line[Input_idx]; |
end_mode_stream(DEFAULT_DEST, 0); |
While_idx++; /* advance the stack pointer */ |
start_mode_stream(DEFAULT_DEST,1,MODE_SCRIPT,NULL); |
|
for(i=1;i<IFcount;i++) {send("\t",NULL);} |
BEGIN S_TRUE_FALSE_STMT; RETURN(CAPA_WHILE); |
send_stream(0,"<while condition=\"",NULL); |
|
send_stream(1,"while (",NULL); |
|
new_cache(); |
|
start_cache(); |
} |
} |
^{Spaces}"/IF" { int i; |
^{Spaces}"/IF" { int i; |
IFcount++; |
IFcount++; |
LLDBUG_PRL2("[IF <IFcount=%d>]",IFcount); |
LLDBUG_PRL2("[IF <IFcount=%d>]",IFcount); |
BEGIN S_TRUE_FALSE_STMT; |
BEGIN S_TRUE_FALSE_STMT; |
if ( IFcount == 1) { |
if ( IFcount == 1) { |
start_streams(2); |
start_streams(DEFAULT_DEST, 2); |
watch_mode[1]=1; |
change_destination(DEFAULT_DEST); |
|
watch_mode[current_dest][1]=1; |
} |
} |
end_mode_stream(0); |
end_mode_stream(DEFAULT_DEST, 0); |
start_mode_stream(1,MODE_SCRIPT,NULL); |
start_mode_stream(DEFAULT_DEST,1,MODE_SCRIPT,NULL); |
for(i=1;i<IFcount;i++) {send("\t",NULL);} |
for(i=1;i<IFcount;i++) {send("\t",NULL);} |
send_stream(0,"<block condition=\"",NULL); |
send_stream(0,"<block condition=\"",NULL); |
send_stream(1,"if (",NULL); |
send_stream(1,"if (",NULL); |
Line 529 EndLine ([\r][\n]|[\n])
|
Line 545 EndLine ([\r][\n]|[\n])
|
} |
} |
^{Spaces}"/ELSE"([^\n])* { int i; |
^{Spaces}"/ELSE"([^\n])* { int i; |
LLDBUG_PRL2("[ELSE <IFcount=%d>]\n",IFcount); |
LLDBUG_PRL2("[ELSE <IFcount=%d>]\n",IFcount); |
end_mode_stream(0); |
end_mode_stream(DEFAULT_DEST,0); |
for(i=1;i<IFcount;i++) {send("\t",NULL);} |
for(i=1;i<IFcount;i++) {send("\t",NULL);} |
send_stream(0, |
send_stream(0, |
"</block>\n<block condition=\"!(%s)\">", |
"</block>\n<block condition=\"!(%s)\">", |
Line 538 EndLine ([\r][\n]|[\n])
|
Line 554 EndLine ([\r][\n]|[\n])
|
} |
} |
^{Spaces}"/ENDIF"([^\n])* { int i; |
^{Spaces}"/ENDIF"([^\n])* { int i; |
IFcount--; |
IFcount--; |
end_mode_stream(0); |
end_mode_stream(DEFAULT_DEST,0); |
for(i=0;i<IFcount;i++) {send("\t",NULL);} |
for(i=0;i<IFcount;i++) {send("\t",NULL);} |
send_stream(0,"</block>"); |
send_stream(0,"</block>"); |
send_stream(1,"}"); |
send_stream(1,"}"); |
if (IFcount == 0) { |
if (IFcount == 0) { |
if (watch_mode[1]) { |
if (watch_mode[current_dest][1]) { |
end_streams(1); |
end_streams(DEFAULT_DEST,1); |
} else { |
} else { |
end_streams(0); |
end_streams(DEFAULT_DEST,0); |
} |
} |
|
change_destination(DEFAULT_DEST); |
} |
} |
delete_cache(); |
delete_cache(); |
LLDBUG_PRL2("[ENDIF <IFcount=%d>]\n",IFcount); |
LLDBUG_PRL2("[ENDIF <IFcount=%d>]\n",IFcount); |
Line 698 EndLine ([\r][\n]|[\n])
|
Line 715 EndLine ([\r][\n]|[\n])
|
<S_HINT>{ |
<S_HINT>{ |
{EndLine} { LLDBUG_PR1("[CR hint]"); |
{EndLine} { LLDBUG_PR1("[CR hint]"); |
send("\n"); |
send("\n"); |
|
change_destination(DEFAULT_DEST); |
BEGIN S_TEXT; |
BEGIN S_TEXT; |
} |
} |
} |
} |
<S_EXPLAIN>{ |
<S_EXPLAIN>{ |
{EndLine} { LLDBUG_PR1("[CR explain]"); |
{EndLine} { LLDBUG_PR1("[CR explain]"); |
send("\n"); |
send("\n"); |
|
change_destination(DEFAULT_DEST); |
BEGIN S_TEXT; |
BEGIN S_TEXT; |
} |
} |
} |
} |
Line 796 EndLine ([\r][\n]|[\n])
|
Line 815 EndLine ([\r][\n]|[\n])
|
} else { |
} else { |
add_delayed("\" />\n\t"); |
add_delayed("\" />\n\t"); |
} |
} |
add_delayed("<responseparam name=\"sig\" type=\"int,range,0-12\" description=\"Significant Figures\" default=\""); |
add_delayed("<responseparam name=\"sig\" type=\"int_range,0-12\" description=\"Significant Figures\" default=\""); |
dosend=2; |
dosend=2; |
} |
} |
|
|
[Ss][Tt][Rr] { LLDBUG_PR1("[STR]"); send("\" str=\""); dosend=1; } |
[Ss][Tt][Rr] { LLDBUG_PR1("[STR]"); send("\" type=\""); dosend=1; } |
[Ee][Vv][Aa][Ll] | |
[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="); dosend=1;} |
[Uu][Nn][Ii][Tt] | |
[Uu][Nn][Ii][Tt] | |
[Uu][Nn][Ii][Tt][Ss] { LLDBUG_PR1("[UNIT]"); send("\" units=\""); dosend=1;} |
[Uu][Nn][Ii][Tt][Ss] { LLDBUG_PR1("[UNIT]"); send("\" unit=\""); dosend=1;} |
|
|
[Ee][Xx][Tt][Ee][Rr][Nn][Aa][Ll] { LLDBUG_PR1("[EXTERNAL]"); dosend=0; } |
[Ee][Xx][Tt][Ee][Rr][Nn][Aa][Ll] { LLDBUG_PR1("[EXTERNAL]"); dosend=0; } |
[Aa][Nn][Ss][Bb][Oo][Xx] { LLDBUG_PR1("[SHOW_ANS_BOX]"); dosend=0; } |
[Aa][Nn][Ss][Bb][Oo][Xx] { LLDBUG_PR1("[SHOW_ANS_BOX]"); dosend=0; } |
Line 827 EndLine ([\r][\n]|[\n])
|
Line 846 EndLine ([\r][\n]|[\n])
|
dosend=1; |
dosend=1; |
flush_delayed(); |
flush_delayed(); |
if (firstparam!=1) send("\" />\n"); |
if (firstparam!=1) send("\" />\n"); |
send("\t<textline />\n</numericalresponse>\n"); |
send("\t<textline />\n"); |
|
/* Fill in Hints */ |
|
if ( !is_dest_empty(HINT_DEST) ) { |
|
send("<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("\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"); |
|
} |
} |
} |
} |
} |
|
|
Line 842 EndLine ([\r][\n]|[\n])
|
Line 876 EndLine ([\r][\n]|[\n])
|
if (dosend==2) add_delayed("&%s",yytext); |
if (dosend==2) add_delayed("&%s",yytext); |
Pcount++; |
Pcount++; |
} |
} |
{Alpha}{AlphaNum}*{Space}*[\[] { char aline[MAX_FUNC_NAME]; |
{Alpha}{AlphaNum}*{Space}*[\[] { |
int i; |
LLDBUG_PR2("[ARRAY<%s>]",yytext); |
for(i=0;i < (yyleng-1); i++) { |
|
if( yytext[i] == ' ' || yytext[i] == '\t' || |
|
yytext[i] == 0 || yytext[i] == '[' ) break; |
|
aline[i] = yytext[i]; |
|
} |
|
aline[i] = 0; |
|
LLDBUG_PR2("[ARRAY<%s>]",aline); |
|
|
|
yylval = (Symbol *) capa_malloc(1, sizeof(Symbol)); /* *** */ |
yyless(yyleng-1); /*<-- push back char '[' */ |
yylval->s_name = strsave(aline); /* free it in parser() */ |
if (dosend==1) send("$%s",yytext); |
yylval->s_type = ARRAY_ID; |
if (dosend==2) add_delayed("$%s",yytext); |
|
|
yyless(yyleng-1); /* <-- push back char '[' */ |
|
RETURN(ARRAY_ID); |
|
} |
} |
{Number}*"\."{Number}*[Ee]"+"{Number}+ | |
{Number}*"\."{Number}*[Ee]"+"{Number}+ | |
{Number}*"\."{Number}*[Ee]{Number}+ | |
{Number}*"\."{Number}*[Ee]{Number}+ | |
Line 875 EndLine ([\r][\n]|[\n])
|
Line 899 EndLine ([\r][\n]|[\n])
|
if (dosend==1) send("%s",yytext); |
if (dosend==1) send("%s",yytext); |
if (dosend==2) add_delayed("%s",yytext); |
if (dosend==2) add_delayed("%s",yytext); |
} |
} |
[\[] { LLDBUG_PR1("[dis let ans map '[']"); return(yytext[0]); } |
[\[] { LLDBUG_PR1("[dis let ans map '[']"); |
[\]] { LLDBUG_PR1("[dis let ans map ']']"); return(yytext[0]); } |
if(dosend==1) send("%s",yytext); |
|
if(dosend==2) add_delayed("%s",yytext); |
|
} |
|
[\]] { LLDBUG_PR1("[dis let ans map ']']"); |
|
if(dosend==1) send("%s",yytext); |
|
if(dosend==2) add_delayed("%s",yytext); |
|
} |
{Space}+ { /* LLDBUG_PR1("[SP ignored]"); Ignore Spaces */ } |
{Space}+ { /* LLDBUG_PR1("[SP ignored]"); Ignore Spaces */ } |
} |
} |
|
|