version 1.2, 2000/05/03 15:35:11
|
version 1.6, 2000/11/21 18:43:29
|
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; |
static int dosend=1; |
|
static int firstparam=1; |
#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 337 void newyy_input (char *buf,int *result,
|
Line 338 void newyy_input (char *buf,int *result,
|
#endif |
#endif |
|
|
int capa_eof(); |
int capa_eof(); |
|
|
%} |
%} |
|
|
Alpha [a-zA-Z_] |
Alpha [a-zA-Z_] |
Line 360 EndLine ([\r][\n]|[\n])
|
Line 362 EndLine ([\r][\n]|[\n])
|
%x S_COMMENT S_HINT S_HINTEXLAINX S_IMPORT S_EXPLAIN S_ENDX S_UNIT S_IGNORE |
%x S_COMMENT S_HINT S_HINTEXLAINX S_IMPORT S_EXPLAIN S_ENDX S_UNIT S_IGNORE |
%x S_SKIP S_VARIABLE S_LET S_DEFINE S_TEXT S_MAP S_FIGURE S_ANSWER |
%x S_SKIP S_VARIABLE S_LET S_DEFINE S_TEXT S_MAP S_FIGURE S_ANSWER |
%x S_STRING S_ANSCONTINUE S_TRUE_FALSE_STMT S_IF_SKIP S_WHILE_SKIP |
%x S_STRING S_ANSCONTINUE S_TRUE_FALSE_STMT S_IF_SKIP S_WHILE_SKIP |
%x S_NEXT_LINE S_VERB |
%x S_NEXT_LINE S_VERB S_ECHO S_STRINGINANS |
%array |
%array |
|
|
|
|
Line 379 EndLine ([\r][\n]|[\n])
|
Line 381 EndLine ([\r][\n]|[\n])
|
} |
} |
|
|
<S_COMMENT>{ |
<S_COMMENT>{ |
{EndLine}{Spaces}"//"[^\n]*$ {LLDBUG_PRL2("[COMMENT<%s>]\n",yytext); |
{EndLine}{Spaces}"//"[^\n]*$ {LLDBUG_PRL2("[COMMENT<%s>]\n",yytext); |
remove_delayed(); |
send("# %s\n",&yytext[2]); |
send("%s",yytext); |
|
send_delayed("\n</comment>\n"); |
|
} |
} |
[^\n]*{EndLine} BEGIN S_TEXT; |
[^\n]*{EndLine} { |
|
send("\n"); BEGIN S_TEXT; |
|
} |
} |
} |
|
|
|
|
<S_TEXT>{ |
<S_TEXT>{ |
^{Spaces}"/LET" | |
^{Spaces}"/LET" | |
^{Spaces}"/BEG" { LLDBUG_PRL1("[LET]"); Pcount = 0; BEGIN S_LET; if (!scriptopen){send("<script>\n");scriptopen=1;} |
^{Spaces}"/BEG" { LLDBUG_PRL1("[LET]"); Pcount = 0; BEGIN S_LET; start_mode(MODE_SCRIPT,NULL); |
} |
} |
^{Spaces}"/VERB" { |
^{Spaces}"/VERB" { |
LLDBUG_PRL1("[VERBATIM]"); |
LLDBUG_PRL1("[VERBATIM]"); |
Dynamic_buf = (char *)capa_malloc(sizeof(char),10); |
|
Dynamic_buf_max = 10; |
|
Dynamic_buf_cur = 0; |
|
Dynamic_buf[0] = '\0'; |
|
BEGIN S_VERB; |
BEGIN S_VERB; |
|
start_mode(MODE_OUTTEXT,NULL); |
|
send("<PRE>\n"); |
} |
} |
^{Spaces}"/HIN"{Alpha}*{Spaces} { LLDBUG_PRL1("[HIN]"); |
^{Spaces}"/HIN"{Alpha}*{Spaces} { LLDBUG_PRL1("[HIN]"); |
send("<block condition=\"&hinton\">\n"); |
start_mode(MODE_BLOCK, |
|
"condition=\"&hinton\""); |
BEGIN S_HINT; |
BEGIN S_HINT; |
} |
} |
^{Spaces}"/EXP"{Alpha}*{Spaces} { LLDBUG_PRL1("[EXP]"); Current_char_p = String_buf; BEGIN S_EXPLAIN; } |
^{Spaces}"/EXP"{Alpha}*{Spaces} { start_mode(MODE_BLOCK,"condition=&explanation"); |
^{Spaces}"/IMP"{Alpha}*{Space}+ { LLDBUG_PRL1("[IMP]"); BEGIN S_IMPORT; } |
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]"); |
^{Spaces}"/END" { LLDBUG_PRL1("[END]"); |
if ( (LexiProblem_p !=NULL) && |
if ( (LexiProblem_p !=NULL) && |
(LexiProblem_p->question != NULL) && |
(LexiProblem_p->question != NULL) && |
Line 415 EndLine ([\r][\n]|[\n])
|
Line 417 EndLine ([\r][\n]|[\n])
|
} else { |
} else { |
EndText_p=NULL; |
EndText_p=NULL; |
} |
} |
End_of_input = 1; BEGIN S_IGNORE;RETURN(CAPA_END); |
End_of_input = 1; BEGIN S_IGNORE; |
} |
} |
^{Spaces}"/START"[^\n]* { LLDBUG_PRL1("[START]"); |
^{Spaces}"/START"[^\n]* { LLDBUG_PRL1("[START]"); |
if (LexiProblem_p !=NULL && |
if (LexiProblem_p !=NULL && |
Line 425 EndLine ([\r][\n]|[\n])
|
Line 427 EndLine ([\r][\n]|[\n])
|
StartText_p=NULL; |
StartText_p=NULL; |
} |
} |
BEGIN S_TEXT; |
BEGIN S_TEXT; |
RETURN(CAPA_START); |
|
} |
} |
|
|
^{Spaces}"/END"{Spaces}[\(]{Spaces} { LLDBUG_PRL1("[END()]"); BEGIN S_ENDX; } |
^{Spaces}"/END"{Spaces}[\(]{Spaces} { LLDBUG_PRL1("[END()]"); BEGIN S_ENDX; } |
^"/DEF" { Bcount = 0; BEGIN S_DEFINE; RETURN(CAPA_DEF); } |
^"/DEF" { Bcount = 0; BEGIN S_DEFINE; RETURN(CAPA_DEF); } |
^{Spaces}"/ANS" { LLDBUG_PRL2("[ANS(%s)]",yytext); Pcount = 0; BEGIN S_ANSWER; RETURN(CAPA_ANS); } |
^{Spaces}"/ANS" { LLDBUG_PRL2("[ANS(%s)]",yytext); |
^{Spaces}"/SUBJECTIVE" { LLDBUG_PRL1("[SUBJECTIVE ANSWER]"); Pcount = 0; BEGIN S_ANSWER; RETURN(CAPA_SUBJ); } |
Pcount = 0; |
^{Spaces}"/MAP" { LLDBUG_PRL1("[MAP]"); Pcount = 0; BEGIN S_MAP; RETURN(CAPA_MAP); } |
BEGIN S_ANSWER; |
^{Spaces}"/RMAP" { LLDBUG_PRL1("[RMAP]"); Pcount = 0; BEGIN S_MAP; RETURN(CAPA_RMAP); } |
end_mode(); |
|
start_mode(MODE_ANSWER,NULL); |
|
send("<caparesponse answer=\""); |
|
dosend=1; |
|
firstparam=1; |
|
} |
|
^{Spaces}"/SUBJECTIVE" { LLDBUG_PRL1("[SUBJECTIVE ANSWER]"); |
|
Pcount = 0; |
|
BEGIN S_ANSWER; |
|
end_mode(); |
|
send("<capasubjectiveresponse"); |
|
dosend=1; |
|
firstparam=1; |
|
} |
|
^{Spaces}"/MAP" { LLDBUG_PRL1("[MAP]"); Pcount = 0; BEGIN S_MAP; start_mode(MODE_SCRIPT,NULL);send("&map("); } |
|
^{Spaces}"/RMAP" { LLDBUG_PRL1("[RMAP]"); Pcount = 0; BEGIN S_MAP; start_mode(MODE_SCRIPT,NULL);send("&rmap("); } |
^{Spaces}"/ENDWHILE"([^\n])* { long int file_pos; |
^{Spaces}"/ENDWHILE"([^\n])* { long int file_pos; |
int top_item, input_idx; |
int top_item, input_idx; |
LLDBUG_PRL2("[ENDWHILE While_idx=<%d>]\n",While_idx); |
LLDBUG_PRL2("[ENDWHILE While_idx=<%d>]\n",While_idx); |
Line 486 EndLine ([\r][\n]|[\n])
|
Line 502 EndLine ([\r][\n]|[\n])
|
LLDBUG_PR1("[DIS<]"); |
LLDBUG_PR1("[DIS<]"); |
init_funcstack(); |
init_funcstack(); |
Pcount = 0; BEGIN S_VARIABLE; |
Pcount = 0; BEGIN S_VARIABLE; |
RETURN(CAPA_VAR); |
start_delayed(); |
} |
} |
"/OR" { LLDBUG_PRL1("[OR]"); BEGIN S_ANSCONTINUE; RETURN(ANS_OR); } |
"/OR" { LLDBUG_PRL1("[OR]"); BEGIN S_ANSCONTINUE; RETURN(ANS_OR); } |
{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); } |
send("\n"); } |
[\\]{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]*$ { LLDBUG_PRL2("[COMMENT<%s>]\n",yytext); |
^{Spaces}"//"[^\n]*$ { LLDBUG_PRL2("[COMMENT<%s>]\n",yytext); |
remove_delayed(); |
start_mode(MODE_SCRIPT,NULL); |
send("<comment>\n%s\n",yytext); |
send("# %s\n",&yytext[2]); |
send_delayed("</comment>\n"); |
|
BEGIN S_COMMENT; |
BEGIN S_COMMENT; |
} |
} |
|
|
[^/\n\\]+$ | |
[^/\n\\]+$ | |
[/] | |
[/] | |
[\\] { yylval = (Symbol *) capa_malloc(1, sizeof(Symbol)); |
[\\] { start_mode(MODE_OUTTEXT,NULL); |
yylval->s_str = strsave(yytext); |
|
LLDBUG_PR2("[TEXT_LINE<%s>]",yytext); |
LLDBUG_PR2("[TEXT_LINE<%s>]",yytext); |
//RETURN(TEXT_LINE); |
send(yytext); |
} |
} |
([^/\n])+[/] | |
([^/\n])+[/] | |
([^/\n])+[\\] { /* matches anything until a '/' or a '\' */ |
([^/\n])+[\\] { /* matches anything until a '/' or a '\' */ |
|
start_mode(MODE_OUTTEXT,NULL); |
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 */ |
Line 531 EndLine ([\r][\n]|[\n])
|
Line 546 EndLine ([\r][\n]|[\n])
|
} |
} |
} else { |
} else { |
sprintf(warn_msg, |
sprintf(warn_msg, |
"at End-of-File, a /END is needed.\n"); |
"at End-of-File, a /END is needed.\n"); |
capa_msg(MESSAGE_ERROR,warn_msg); |
capa_msg(MESSAGE_ERROR,warn_msg); |
} |
} |
free_problems(LexiProblem_p); |
free_problems(LexiProblem_p); |
Line 629 EndLine ([\r][\n]|[\n])
|
Line 644 EndLine ([\r][\n]|[\n])
|
} |
} |
<S_HINT>{ |
<S_HINT>{ |
{EndLine} { LLDBUG_PR1("[CR hint]"); |
{EndLine} { LLDBUG_PR1("[CR hint]"); |
send("\n</block>\n"); |
send("\n"); |
BEGIN S_TEXT; |
BEGIN S_TEXT; |
} |
} |
} |
} |
<S_EXPLAIN>{ |
<S_EXPLAIN>{ |
{EndLine} { LLDBUG_PR1("[CR explain]"); |
{EndLine} { LLDBUG_PR1("[CR explain]"); |
yylval = (Symbol *) capa_malloc(1, sizeof(Symbol)); |
send("\n"); |
*Current_char_p++ = '\n'; *Current_char_p = '\0'; |
BEGIN S_TEXT; |
yylval->s_str = strsave(String_buf); |
|
BEGIN S_TEXT; RETURN(EXPLAIN_LINE); |
|
} |
} |
} |
} |
|
|
Line 686 EndLine ([\r][\n]|[\n])
|
Line 699 EndLine ([\r][\n]|[\n])
|
} |
} |
|
|
<S_IMPORT>{ |
<S_IMPORT>{ |
{FileName}{Space}* { send("<import>%s</import>\n",yytext); BEGIN S_SKIP; } |
{FileName}{Space}* { end_mode();send("<import>/res/capa/%s</import>\n",yytext); BEGIN S_SKIP; } |
{Identifier}{Space}* { send("<import>$%s</import>\n",yytext); BEGIN S_SKIP; } |
{Identifier}{Space}* { end_mode();send("<import>$%s</import>\n",yytext); BEGIN S_SKIP; } |
} |
} |
|
|
<S_ANSWER>{ |
<S_ANSWER>{ |
[Pp][Ll][Uu][Ss] { LLDBUG_PR1("[PLUS]"); RETURN(ANS_PLUS); } |
[Pp][Ll][Uu][Ss] { LLDBUG_PR1("[PLUS]"); add_delayed("+");} |
[Mm][Ii][Nn][Uu][Ss] { LLDBUG_PR1("[MINUS]"); RETURN(ANS_MINUS); } |
[Mm][Ii][Nn][Uu][Ss] { LLDBUG_PR1("[MINUS]"); add_delayed("-");} |
[Cc][Ss] { LLDBUG_PR1("[CS]"); RETURN(ANS_CS); } |
|
[Cc][Ii] { LLDBUG_PR1("[CI]"); RETURN(ANS_CI); } |
[Cc][Ss] { LLDBUG_PR1("[CS]"); send("cs");} |
[Mm][Cc] { LLDBUG_PR1("[MC]"); RETURN(ANS_MC); } |
[Cc][Ii] { LLDBUG_PR1("[CI]"); send("ci");} |
|
[Mm][Cc] { LLDBUG_PR1("[MC]"); send("mc");} |
|
[Ff][Mm][Ll] { LLDBUG_PR1("[FORMULA]"); send("fml"); } |
|
|
[Oo][Nn] | |
[Oo][Nn] | |
[Yy][Ee][Ss] { LLDBUG_PR1("[ON]"); RETURN(ANS_ON); } |
[Yy][Ee][Ss] { LLDBUG_PR1("[ON]"); send("on");} |
[Oo][Ff][Ff] | |
[Oo][Ff][Ff] | |
[Nn][Oo] { LLDBUG_PR1("[OFF]"); RETURN(ANS_OFF); } |
[Nn][Oo] { LLDBUG_PR1("[OFF]"); send("off");} |
[Ff][Mm][Ll] { LLDBUG_PR1("[FORMULA]"); RETURN(ANS_FORMULA); } |
[Ff][Mm][Tt] { LLDBUG_PR1("[FMT]"); } |
[Ff][Mm][Tt] { LLDBUG_PR1("[FMT]"); RETURN(ANS_FMT); } |
[Uu][Nn][Ff][Mm][Tt] { LLDBUG_PR1("[UNFMT]"); } |
[Uu][Nn][Ff][Mm][Tt] { LLDBUG_PR1("[UNFMT]"); RETURN(ANS_UNFMT); } |
|
[,:%=@#-] { LLDBUG_PR2("[symbol(%s)]",yytext); return(yytext[0]); } |
[,=] { LLDBUG_PR2("[symbol(%s)]",yytext);} |
"<" { LLDBUG_PR2("[symbol(%s)]",yytext); return(yytext[0]); } |
[%] { LLDBUG_PR2("[symbol(%s)]",yytext); |
">" { LLDBUG_PR2("[symbol(%s)]",yytext); return(yytext[0]); } |
if (dosend==1) send("%s",yytext); |
[Ss][Ii][Gg] { LLDBUG_PR2("[SIG(%s)]",yytext); RETURN(ANS_SIG); } |
if (dosend==2) add_delayed("%s",yytext); |
[Tt][Oo][Ll] { LLDBUG_PR2("[tol(%s)]",yytext); RETURN(ANS_TOLERANCE); } |
} |
[Ss][Tt][Rr] { LLDBUG_PR1("[STR]"); RETURN(ANS_COMPARE); } |
[:@#-] { LLDBUG_PR2("[symbol(%s)]",yytext); |
[Ww][Gg][Tt] { LLDBUG_PR1("[WGT]"); RETURN(ANS_WEIGHT); } |
if (dosend==1) send("%s",yytext); |
|
if (dosend==2) add_delayed("%s",yytext); |
|
} |
|
"<" { LLDBUG_PR2("[symbol(%s)]",yytext); |
|
if (dosend==1) send("%s",yytext); |
|
if (dosend==2) add_delayed("%s",yytext); |
|
} |
|
">" { LLDBUG_PR2("[symbol(%s)]",yytext); |
|
if (dosend==1) send("%s",yytext); |
|
if (dosend==2) add_delayed("%s",yytext); |
|
} |
|
|
[Pp][Cc][Rr] | |
[Pp][Cc][Rr] | |
[Hh][Gg][Rr] { RETURN(ANS_PCREDIT); } |
[Hh][Gg][Rr] { if (firstparam) firstparam=0; else add_delayed("\"></responseparam>\n\t"); |
[Pp][Aa][Tt][Hh] { RETURN(ANS_PATH); } |
add_delayed("<responseparam type=\"hgr\" value=\"on|off\" default=\""); |
[Cc][Aa][Ll][Cc] { RETURN(ANS_CALC); } |
dosend=2; |
[Tt][Rr][Yy] | |
} |
[Tt][Rr][Ii][Ee][Ss] { LLDBUG_PR1("[TRY]"); RETURN(ANS_TRY); } |
[Tt][Oo][Ll] { LLDBUG_PR2("[tol(%s)]",yytext); |
[Uu][Nn][Ii][Tt] | |
if (firstparam) firstparam=0; else add_delayed("\"></responseparam>\n\t"); |
[Uu][Nn][Ii][Tt][Ss] { LLDBUG_PR1("[UNIT]"); RETURN(ANS_UNIT); } |
add_delayed("<responseparam type=\"tol\" value=\"tolerance\" default=\""); |
[Bb][Rr] { LLDBUG_PR1("[SHOW_BR]"); RETURN(ANS_SHOW_BR); } |
dosend=2; |
[Vv][Ee][Rr][Bb][Aa][Tt][Ii][Mm] { LLDBUG_PR1("[VERBATIM]"); RETURN(ANS_VERBATIM); } |
} |
[Aa][Nn][Ss][Bb][Oo][Xx] { LLDBUG_PR1("[SHOW_ANS_BOX]"); RETURN(ANS_BOX_SHOW); } |
[Ss][Ii][Gg] { |
[Hh][Ii][Nn][Tt] { LLDBUG_PR1("[HINT]"); RETURN(ANS_HINT); } |
LLDBUG_PR2("[SIG(%s)]",yytext); |
[Ee][Xx][Pp][Ll][Aa][Ii][Nn] { LLDBUG_PR1("[EXPLAIN]"); RETURN(ANS_EXPLAIN); } |
if (firstparam) firstparam=0; else add_delayed("\"></responseparam>\n\t"); |
[Ee][Xx][Tt][Ee][Rr][Nn][Aa][Ll] { LLDBUG_PR1("[EXTERNAL]"); RETURN(ANS_EXTERNAL); } |
add_delayed("<responseparam type=\"sig\" value=\"int,range,0-12\" default=\""); |
|
dosend=2; |
|
} |
|
|
|
[Ss][Tt][Rr] { LLDBUG_PR1("[STR]"); send("\" str="); dosend=1; } |
[Ee][Vv][Aa][Ll] | |
[Ee][Vv][Aa][Ll] | |
[Ee][Vv][Aa][Ll][Uu][Aa][Tt][Ee] { LLDBUG_PR1("[EVAL]"); RETURN(ANS_EVAL); } |
[Ee][Vv][Aa][Ll][Uu][Aa][Tt][Ee] { LLDBUG_PR1("[EVAL]");send("\" eval="); dosend=1;} |
|
[Uu][Nn][Ii][Tt] | |
|
[Uu][Nn][Ii][Tt][Ss] { LLDBUG_PR1("[UNIT]"); send("\" units=\""); dosend=1;} |
|
|
|
[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; } |
|
[Vv][Ee][Rr][Bb][Aa][Tt][Ii][Mm] { LLDBUG_PR1("[VERBATIM]"); dosend=0; } |
|
[Bb][Rr] { LLDBUG_PR1("[SHOW_BR]"); dosend=0; } |
|
[Pp][Aa][Tt][Hh] { send("\" path=\""); dosend=0; } |
|
[Cc][Aa][Ll][Cc] { send("\" calc=\""); dosend=0; } |
|
|
|
[Ee][Xx][Pp][Ll][Aa][Ii][Nn] { LLDBUG_PR1("[EXPLAIN]"); dosend=0; } |
|
[Hh][Ii][Nn][Tt] { LLDBUG_PR1("[HINT]"); dosend=0; } |
|
[Tt][Rr][Yy] | |
|
[Tt][Rr][Ii][Ee][Ss] { LLDBUG_PR1("[TRY]"); dosend=0; } |
|
[Ww][Gg][Tt] { LLDBUG_PR1("[WGT]"); dosend=0; } |
|
|
[\)] { LLDBUG_PR1("[)]"); Pcount--; |
[\)] { LLDBUG_PR1("[)]"); Pcount--; |
if(Pcount==0) { |
if(Pcount==0) { |
BEGIN S_ANSCONTINUE; |
BEGIN S_ANSCONTINUE; |
} |
} |
return(yytext[0]); |
send("\">\n\t"); |
|
dosend=1; |
|
flush_delayed(); |
|
if (!firstparam) send("\">"); |
|
send("\n\t<textline></textline>\n</caparesponse>\n"); |
} |
} |
} |
} |
|
|
<S_VARIABLE,S_TRUE_FALSE_STMT,S_LET,S_ANSWER,S_MAP>{ |
<S_VARIABLE,S_TRUE_FALSE_STMT,S_LET,S_MAP,S_ANSWER>{ |
{Alpha}{AlphaNum}* { LLDBUG_PR2("[ID<%s>]",yytext);LLDBUG_PR2("[SYMB CNT=<%d>]", Symb_count); |
{Alpha}{AlphaNum}* { LLDBUG_PR2("[ID<%s>]",yytext); |
send("$%s",yytext); |
LLDBUG_PR2("[SYMB CNT=<%d>]", Symb_count); |
|
if (dosend==1) send("$%s",yytext); |
|
if (dosend==2) add_delayed("$%s",yytext); |
} |
} |
|
|
{Alpha}{AlphaNum}*{Space}*[(] { char aline[MAX_FUNC_NAME]; |
{Alpha}{AlphaNum}*{Space}*[(] { if (dosend==1) send("&%s",yytext); |
int i; |
if (dosend==2) add_delayed("&%s",yytext); |
send("&%s",yytext); |
|
Pcount++; |
Pcount++; |
} |
} |
{Alpha}{AlphaNum}*{Space}*[\[] { char aline[MAX_FUNC_NAME]; |
{Alpha}{AlphaNum}*{Space}*[\[] { char aline[MAX_FUNC_NAME]; |
Line 768 send("$%s",yytext);
|
Line 820 send("$%s",yytext);
|
{Number}+[Ee]{Number}+ | |
{Number}+[Ee]{Number}+ | |
{Number}+[Ee]"-"{Number}+ | |
{Number}+[Ee]"-"{Number}+ | |
{Number}+"\."{Number}* | |
{Number}+"\."{Number}* | |
"\."{Number}+ { |
"\."{Number}+ { LLDBUG_PR2("[REAL<%s>]",yytext); |
LLDBUG_PR2("[REAL<%s>]",yytext); |
if(dosend==1) send("%s",yytext); |
send(yytext); |
if(dosend==2) add_delayed("%s",yytext); |
} |
} |
|
|
{Number}+ { |
{Number}+ { LLDBUG_PR2("[INT<%s>]",yytext); |
LLDBUG_PR2("[INT<%s>]",yytext); |
if (dosend==1) send("%s",yytext); |
send(yytext); |
if (dosend==2) add_delayed("%s",yytext); |
} |
} |
[\(] { 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 */ } |
[\"] { LLDBUG_PR1("[TF,V,LET,ANS,MAP str\" ]"); |
} |
|
|
|
<S_VARIABLE,S_TRUE_FALSE_STMT,S_MAP,S_LET>{ |
|
[\"] { LLDBUG_PR1("[TF,V,LET,MAP str\" ]"); |
Current_char_p = String_buf; |
Current_char_p = String_buf; |
yy_push_state(S_STRING); |
send("\""); |
|
yy_push_state(S_STRING); |
} |
} |
} |
} |
|
|
<S_VARIABLE,S_ANSWER>[:]{Number}+[EeFf] { char num[ONE_TWO_EIGHT], fmt[SMALL_LINE_BUFFER]; |
<S_ANSWER>{ |
int i; |
[\"] { LLDBUG_PR1("[ANS str\" ]"); |
LLDBUG_PR2("[FORMAT<%s>]",yytext); |
Current_char_p = String_buf; |
for(i=0;i<yyleng-2;i++) { |
yy_push_state(S_STRINGINANS); |
num[i] = yytext[i+1]; |
} |
} |
} |
num[yyleng-2] = 0; /* terminate the numerical string */ |
|
yylval = (Symbol *) capa_malloc(1, sizeof(Symbol)); |
<S_VARIABLE,S_TRUE_FALSE_STMT,S_MAP,S_ANSWER>{ |
i = strtol(num, (char **) 0, 0); |
[\(] { LLDBUG_PR1("[dis let ans map (]"); |
yylval->s_type=FORMAT; |
Pcount++; |
switch( yytext[yyleng-1] ) { |
if (Pcount > 1 ) { |
case 'e': sprintf(fmt,"%%.%de", i); |
if (dosend==1) send(yytext); |
yylval->s_distype = E_FORMAT; break; |
if (dosend==2) add_delayed(yytext); |
case 'E': sprintf(fmt,"%%.%dE", i); |
} |
yylval->s_distype = E_FORMAT; break; |
} |
case 'f': |
} |
case 'F': sprintf(fmt,"%%.%df", i); |
|
yylval->s_distype = F_FORMAT; break; |
<S_LET>{ |
} |
[\(] { LLDBUG_PR1("[dis let ans map (]"); |
yylval->s_str = strsave(fmt); |
Pcount++; |
RETURN(FORMAT); |
send(yytext); |
|
} |
|
} |
|
|
|
<S_VARIABLE>[:]{Number}+[EeFf] { |
|
end_delayed(); |
|
send("&format("); |
|
flush_delayed(); |
|
send(",\"%s\")",yytext+1); |
|
} |
|
<S_ANSWER>[:]{Number}+[EeFf] { |
|
if (dosend) send("\" format=\"%s",yytext+1); |
} |
} |
|
|
<S_VARIABLE,S_TRUE_FALSE_STMT,S_LET,S_MAP>{ |
<S_VARIABLE,S_TRUE_FALSE_STMT,S_LET,S_MAP>{ |
"==" { LLDBUG_PR1("[==]"); RETURN(EQ_op); } |
"==" { LLDBUG_PR1("[==]"); send(yytext); } |
"!=" { LLDBUG_PR1("[!=]"); RETURN(NE_op); } |
"!=" { LLDBUG_PR1("[!=]"); send(yytext); } |
">" { LLDBUG_PR1("[>]"); RETURN(GT_op); } |
">" { LLDBUG_PR1("[>]"); send(yytext); } |
">=" { LLDBUG_PR1("[>=]"); RETURN(GE_op); } |
">=" { LLDBUG_PR1("[>=]"); send(yytext); } |
"<" { LLDBUG_PR1("[<]"); RETURN(LT_op); } |
"<" { LLDBUG_PR1("[<]"); send(yytext); } |
"<=" { LLDBUG_PR1("[<=]"); RETURN(LE_op); } |
"<=" { LLDBUG_PR1("[<=]"); send(yytext); } |
"&&" { LLDBUG_PR1("[&&]"); RETURN(AND_op); } |
"&&" { LLDBUG_PR1("[&&]"); send(yytext); } |
"||" { LLDBUG_PR1("[||]"); RETURN(OR_op); } |
"||" { LLDBUG_PR1("[||]"); send(yytext); } |
"//" { if(Pcount==0) BEGIN S_SKIP; } |
"//" { if(Pcount==0) { |
|
send("; #"); |
|
BEGIN S_ECHO; |
|
} |
|
} |
{Operator} { LLDBUG_PR2("[Op(%c) in VAR,TF_STMT,LET]",yytext[0]); send(yytext); } |
{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; send(yytext); } |
[\)] { LLDBUG_PR1("[)]"); |
|
Pcount--; |
|
if(Pcount == 0) { |
|
BEGIN S_TEXT; |
|
flush_delayed(); |
|
} else { |
|
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"); } |
. { char warn_msg[WARN_MSG_LENGTH]; |
. { char warn_msg[WARN_MSG_LENGTH]; |
sprintf(warn_msg,"When use a VARIABLE, an unexpected char [%c] is encountered.\n",yytext[0]); |
sprintf(warn_msg,"When use a VARIABLE, an unexpected char [%c] is encountered.\n",yytext[0]); |
capa_msg(MESSAGE_ERROR,warn_msg); |
capa_msg(MESSAGE_ERROR,warn_msg); |
Line 846 send("$%s",yytext);
|
Line 924 send("$%s",yytext);
|
} |
} |
|
|
<S_STRING>{ |
<S_STRING>{ |
[\\][\\] { char *aptr = yytext; |
[\\][\\] { /*char *aptr = yytext; |
while( *aptr ) *Current_char_p++ = *aptr++; |
while( *aptr ) *Current_char_p++ = *aptr++;*/ |
|
send(yytext); |
|
} |
|
[\\][\"] { /**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("\""); |
|
yy_pop_state(); |
|
} |
|
{EndLine} { /* check for termination of string constant */ |
|
char warn_msg[WARN_MSG_LENGTH]; |
|
|
|
sprintf(warn_msg,"STRING not terminated properly, an EoL encountered in the middle.\n%s\n",String_buf); |
|
capa_msg(MESSAGE_ERROR,warn_msg); |
|
yy_pop_state(); |
|
} |
|
. { /*char *aptr = yytext; |
|
while( *aptr ) *Current_char_p++ = *aptr++;*/ |
|
send(yytext); |
|
} |
|
} |
|
|
|
<S_STRINGINANS>{ |
|
[\\][\\] { /*char *aptr = yytext; |
|
while( *aptr ) *Current_char_p++ = *aptr++;*/ |
|
if (dosend==1) send("%s",yytext); |
|
if (dosend==2) add_delayed("%s",yytext); |
|
} |
|
[\\][\"] { /**Current_char_p++ = '"';*/ |
|
if (dosend==1) send("%s",yytext); |
|
if (dosend==2) add_delayed("%s",yytext); |
} |
} |
[\\][\"] { *Current_char_p++ = '"'; } |
|
[\\]{Space}*[\n] { LLDBUG_PR2("[\\CR continue in S_STRING](%s)",yytext); /* continuation on next line */ } |
[\\]{Space}*[\n] { LLDBUG_PR2("[\\CR continue in S_STRING](%s)",yytext); /* continuation on next line */ } |
[\"] { /* end of a string constant -- */ |
[\"] { /* end of a string constant -- */ |
yylval = (Symbol *) capa_malloc(1, sizeof(Symbol)); |
|
*Current_char_p = '\0'; |
|
yylval->s_str = strsave(String_buf); /* **** */ |
|
yylval->s_type = S_CONSTANT; |
|
/* printf("STRING:%s\n", String_buf); */ |
|
LLDBUG_PR2("[%s\"END str]",String_buf); |
|
yy_pop_state(); |
yy_pop_state(); |
RETURN(S_CONSTANT); } |
} |
{EndLine} { /* check for termination of string constant */ |
{EndLine} { /* check for termination of string constant */ |
char warn_msg[WARN_MSG_LENGTH]; |
char warn_msg[WARN_MSG_LENGTH]; |
|
|
*Current_char_p = '\0'; |
|
sprintf(warn_msg,"STRING not terminated properly, an EoL encountered in the middle.\n%s\n",String_buf); |
sprintf(warn_msg,"STRING not terminated properly, an EoL encountered in the middle.\n%s\n",String_buf); |
capa_msg(MESSAGE_ERROR,warn_msg); |
capa_msg(MESSAGE_ERROR,warn_msg); |
yy_pop_state(); |
yy_pop_state(); |
} |
} |
. { char *aptr = yytext; |
. { /*char *aptr = yytext; |
while( *aptr ) *Current_char_p++ = *aptr++; |
while( *aptr ) *Current_char_p++ = *aptr++;*/ |
|
if (dosend==1) send("%s",yytext); |
|
if (dosend==2) add_delayed("%s",yytext); |
} |
} |
} |
} |
|
|
Line 880 send("$%s",yytext);
|
Line 982 send("$%s",yytext);
|
{EndLine} { BEGIN S_TEXT; } |
{EndLine} { BEGIN S_TEXT; } |
} |
} |
|
|
|
<S_ECHO>{ |
|
[^\n]+$ { send(yytext); } |
|
{EndLine} { send(yytext); 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; send(yytext); send_delayed("</script>"); } |
{EndLine} { LLDBUG_PR1("[EoL END let ans map]\n"); |
|
if(Pcount == 0) BEGIN S_TEXT; |
|
send(";%s",yytext); |
|
} |
} |
} |
|
|
<S_MAP>{ |
<S_MAP>{ |
[;,] { LLDBUG_PR2("[%c]",yytext[0]); return(yytext[0]); } |
[;,] { LLDBUG_PR2("[%c]",yytext[0]); send("%c",yytext[0]); } |
[\)] { LLDBUG_PR1("[) in MAP]"); Pcount--; |
[\)] { LLDBUG_PR1("[) in MAP]"); Pcount--; |
if(Pcount==0) { |
if(Pcount==0) { |
BEGIN S_SKIP; |
BEGIN S_SKIP; |
} |
} |
return(yytext[0]); |
send("%c",yytext[0]); |
} |
} |
} |
} |
|
|
Line 961 send("$%s",yytext);
|
Line 1071 send("$%s",yytext);
|
|
|
<S_VERB>{ |
<S_VERB>{ |
^{Spaces}"/ENDVERB" { LLDBUG_PRL1("[END VERB]\n"); |
^{Spaces}"/ENDVERB" { LLDBUG_PRL1("[END VERB]\n"); |
yylval = (Symbol *) capa_malloc(1, sizeof(Symbol)); |
BEGIN S_TEXT; |
yylval->s_str = strsave(Dynamic_buf); /* **** */ |
puts("\n</PRE>\n"); |
yylval->s_type = S_CONSTANT; |
end_mode(); |
capa_mfree(Dynamic_buf); |
|
Dynamic_buf_cur=-1; |
|
Dynamic_buf_max=0; |
|
BEGIN S_TEXT; RETURN(VERBATIM); |
|
} |
} |
.*|{EndLine} { append_dynamic_buf(yytext); } |
.*|{EndLine} { send(yytext); } |
} |
} |
|
|
%% |
%% |
Line 1581 int capa_eof()
|
Line 1687 int capa_eof()
|
LexiProblem_p=NULL; |
LexiProblem_p=NULL; |
/* printf("\nCAPA EOF\n"); fflush(stdout); */ |
/* printf("\nCAPA EOF\n"); fflush(stdout); */ |
} |
} |
|
end_mode(); |
return (0); |
return (0); |
#endif /*AVOIDYYINPUT*/ |
#endif /*AVOIDYYINPUT*/ |
} |
} |