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>{ |