version 1.8, 2000/06/27 18:28:49
|
version 1.14, 2007/07/11 19:23:43
|
Line 1
|
Line 1
|
|
/* main CAPA lexer |
|
Copyright (C) 1992-2000 Michigan State University |
|
|
|
The CAPA system is free software; you can redistribute it and/or |
|
modify it under the terms of the GNU General Public License as |
|
published by the Free Software Foundation; either version 2 of the |
|
License, or (at your option) any later version. |
|
|
|
The CAPA system is distributed in the hope that it will be useful, |
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
General Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public |
|
License along with the CAPA system; see the file COPYING. If not, |
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
Boston, MA 02111-1307, USA. |
|
|
|
As a special exception, you have permission to link this program |
|
with the TtH/TtM library and distribute executables, as long as you |
|
follow the requirements of the GNU GPL in regard to all of the |
|
software in the executable aside from TtH/TtM. |
|
*/ |
|
|
/*------------------------------------------------------------------------*/ |
/*------------------------------------------------------------------------*/ |
/* capaLexerDef.flex created by Isaac Tsai Jul 15 1996 */ |
/* capaLexerDef.flex created by Isaac Tsai Jul 15 1996 */ |
/* added /END(variable) */ |
/* added /END(variable) */ |
Line 17
|
Line 41
|
/*------------------------------------------------------------------------*/ |
/*------------------------------------------------------------------------*/ |
/**************************************************************************/ |
/**************************************************************************/ |
|
|
|
%option stack |
|
|
%{ |
%{ |
|
|
#include <stdio.h> |
#include <stdio.h> |
Line 217 void newyy_input (char *buf,int *result,
|
Line 243 void newyy_input (char *buf,int *result,
|
if ( Lexi_buf[Input_idx] == NULL ) { \ |
if ( Lexi_buf[Input_idx] == NULL ) { \ |
Lexi_buf[Input_idx] = (char *)capa_malloc(sizeof(char)*LEX_BUFLEN+1,1); out_of_char=1; \ |
Lexi_buf[Input_idx] = (char *)capa_malloc(sizeof(char)*LEX_BUFLEN+1,1); out_of_char=1; \ |
} else { \ |
} else { \ |
if (!Lexi_buf[Input_idx][Lexi_pos[Input_idx]]) { /* test if the line buffer is empty or at the end */ \ |
if (!Lexi_buf[Input_idx][Lexi_pos[Input_idx] ]) { /* test if the line buffer is empty or at the end */ \ |
out_of_char=1; \ |
out_of_char=1; \ |
} \ |
} \ |
} \ |
} \ |
if( out_of_char ) { \ |
if( out_of_char ) { \ |
if (fgets(Lexi_buf[Input_idx],LEX_BUFLEN-1,Input_stream[Input_idx])==NULL) { /* read in one line */ \ |
if (fgets(Lexi_buf[Input_idx],LEX_BUFLEN-1,Input_stream[Input_idx])==NULL) { /* read in one line */ \ |
LIDBUG_PR2("<<yy_input() fgets() returns NULL, input index=%d>>\n",Input_idx); \ |
LIDBUG_PR2("<<yy_input() fgets() returns NULL, input index=%d>>\n",Input_idx); \ |
if( (Input_idx > 0) && ( Lexi_buf[Input_idx][Lexi_pos[Input_idx]] == '\0') ) { \ |
if( (Input_idx > 0) && ( Lexi_buf[Input_idx][Lexi_pos[Input_idx] ] == '\0') ) { \ |
LIDBUG_PR2("<<yy_input() close an input stream, input index=%d>>\n",Input_idx); \ |
LIDBUG_PR2("<<yy_input() close an input stream, input index=%d>>\n",Input_idx); \ |
fclose(Input_stream[Input_idx]); \ |
fclose(Input_stream[Input_idx]); \ |
capa_mfree((char *)Lexi_buf[Input_idx]); \ |
capa_mfree((char *)Lexi_buf[Input_idx]); \ |
Line 280 void newyy_input (char *buf,int *result,
|
Line 306 void newyy_input (char *buf,int *result,
|
first_run=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"); \ |
} \ |
} \ |
if (!Lexi_buf[Input_idx][Lexi_pos[Input_idx]]) { /* test if the line buffer is empty or at the end */ \ |
if (!Lexi_buf[Input_idx][Lexi_pos[Input_idx] ]) { /* test if the line buffer is empty or at the end */ \ |
if (fgets(Lexi_buf[Input_idx],LEX_BUFLEN-1,Input_stream[Input_idx])==NULL) { /* read in one line */ \ |
if (fgets(Lexi_buf[Input_idx],LEX_BUFLEN-1,Input_stream[Input_idx])==NULL) { /* read in one line */ \ |
LIDBUG_PR2("<<yy_input() fgets() returns NULL, input index=%d>>\n",Input_idx); \ |
LIDBUG_PR2("<<yy_input() fgets() returns NULL, input index=%d>>\n",Input_idx); \ |
if( (Input_idx > 0) && ( Lexi_buf[Input_idx][Lexi_pos[Input_idx]] == '\0') ) { \ |
if( (Input_idx > 0) && ( Lexi_buf[Input_idx][Lexi_pos[Input_idx] ] == '\0') ) { \ |
LIDBUG_PR2("<<yy_input() close an input stream, input index=%d>>\n",Input_idx); \ |
LIDBUG_PR2("<<yy_input() close an input stream, input index=%d>>\n",Input_idx); \ |
fclose(Input_stream[Input_idx]); \ |
fclose(Input_stream[Input_idx]); \ |
Input_idx--; \ |
Input_idx--; \ |
Line 1023 begin_text() { BEGIN S_TEXT; }
|
Line 1049 begin_text() { BEGIN S_TEXT; }
|
extern void |
extern void |
begin_question() { LLDBUG_PR1("[<S_TEXT>]"); |
begin_question() { LLDBUG_PR1("[<S_TEXT>]"); |
IFcount = 0; While_idx=0; /* initialize some stacks */ |
IFcount = 0; While_idx=0; /* initialize some stacks */ |
End_of_input = 0; YY_FLUSH_BUFFER; BEGIN S_TEXT; } |
End_of_input = 0; yy_flush_buffer(YY_CURRENT_BUFFER ); BEGIN S_TEXT; } |
|
|
extern void |
extern void |
end_problemset() { End_of_input = 0; YY_FLUSH_BUFFER; BEGIN S_TEXT; } |
end_problemset() { End_of_input = 0; yy_flush_buffer(YY_CURRENT_BUFFER ); BEGIN S_TEXT; } |
|
|
|
|
/* ========================================================================================== */ |
/* ========================================================================================== */ |
Line 1100 input() /* ARGUMENTS:
|
Line 1126 input() /* ARGUMENTS:
|
startup=0; |
startup=0; |
yyin = Input_stream[Input_idx]; |
yyin = Input_stream[Input_idx]; |
} |
} |
if (!Lexi_buf[Input_idx][Lexi_pos[Input_idx]]) { |
if (!Lexi_buf[Input_idx][Lexi_pos[Input_idx] ]) { |
if (fgets(Lexi_buf[Input_idx],LEX_BUFLEN-1,Input_stream[Input_idx])==NULL) { |
if (fgets(Lexi_buf[Input_idx],LEX_BUFLEN-1,Input_stream[Input_idx])==NULL) { |
/* EOF? */ |
/* EOF? */ |
/* no use in flex |
/* no use in flex |
Line 1558 void newyy_input (char *buf,int *result,
|
Line 1584 void newyy_input (char *buf,int *result,
|
if ( Lexi_buf[Input_idx] == NULL ) { |
if ( Lexi_buf[Input_idx] == NULL ) { |
Lexi_buf[Input_idx] = (char *)capa_malloc(sizeof(char)*LEX_BUFLEN+1,1); out_of_char=1; |
Lexi_buf[Input_idx] = (char *)capa_malloc(sizeof(char)*LEX_BUFLEN+1,1); out_of_char=1; |
} else { |
} else { |
if (!Lexi_buf[Input_idx][Lexi_pos[Input_idx]]) { |
if (!Lexi_buf[Input_idx][Lexi_pos[Input_idx] ]) { |
/* test if the line buffer is empty or at the end */ |
/* test if the line buffer is empty or at the end */ |
out_of_char=1; |
out_of_char=1; |
} |
} |
Line 1567 void newyy_input (char *buf,int *result,
|
Line 1593 void newyy_input (char *buf,int *result,
|
if (fgets(Lexi_buf[Input_idx],LEX_BUFLEN-1,Input_stream[Input_idx])==NULL) { |
if (fgets(Lexi_buf[Input_idx],LEX_BUFLEN-1,Input_stream[Input_idx])==NULL) { |
/* read in one line */ |
/* read in one line */ |
LIDBUG_PR2("<<yy_input() fgets() returns NULL, input index=%d>>\n",Input_idx); |
LIDBUG_PR2("<<yy_input() fgets() returns NULL, input index=%d>>\n",Input_idx); |
if( (Input_idx > 0) && ( Lexi_buf[Input_idx][Lexi_pos[Input_idx]] == '\0') ) { |
if( (Input_idx > 0) && ( Lexi_buf[Input_idx][Lexi_pos[Input_idx] ] == '\0') ) { |
LIDBUG_PR2("<<yy_input() close an input stream, input index=%d>>\n",Input_idx); |
LIDBUG_PR2("<<yy_input() close an input stream, input index=%d>>\n",Input_idx); |
fclose(Input_stream[Input_idx]); |
fclose(Input_stream[Input_idx]); |
capa_mfree((char *)Lexi_buf[Input_idx]); |
capa_mfree((char *)Lexi_buf[Input_idx]); |