. , , ,

,,,

FOR BASIC — ,

,

.

.

FOR BASIC.

: .

: .

: 513.

: .

: .

- 1997

FOR BASIC:

FOR =|| TO || [ STEP || ]

-

-

-

:

<>FOR <>= TO [ STEP ]

<>{|}

<><>[E<>] |E<>

<>[{}].{}| {}

<>T|+T|-T

T | T* | T/ | T**

Ϯ| |<>

O -

-

-

-

-

-

-

-

-

-, .. - :

a, AÎVn , aÎV*

-.

:

FOR C=0 TO 128.456E23 STEP 45.67


pp pp

p

pp p

p

p

p

p

pp FOR

p

pp p

pp p

p

pp p

p

pp

pp p

p

p

p

pp '='

pp p

pp p

pp p

p

pp '('

p

pp p

p

pp

p

pp

pp

p

pp p

pp p

p

p

p

pp 'E'

p

p

pp '*'

pp '/'

p

p

pp '+' '-'

p

p

pp p

pp p

p

p

pp TO

p

pp p

pp p

p

pp p

pp p

pp p

p

pp '('

p

pp p

p

pp

p

pp

pp

p

pp p

pp p

p

pp p

p

pp p

p

pp '.'

p

pp p

p

pp p

p

pp p

p

p

p

pp 'E'

p

pp p

pp p

p

pp p

p

p

p

pp '*'

pp '/'

p

p

pp '+' '-'

p

p

pp p

pp p

p

p

pp STEP

p

pp p

pp p

p

pp p

pp p

pp p

p

pp '('

p

pp p

p

pp

p

pp

pp

p

pp p

pp p

p

pp p

p

pp '.'

p

pp p

p

pp p

p

p

p

pp 'E'

p

p

pp '*'

pp '/'

p

p

pp '+' '-'

p

p

pp p

pp p

p

pp p


FOR C=A*B+10 TO B-2*C


pp pp

p

pp p

p

p

p

p

pp FOR

p

pp p

pp p

p

pp p

p

pp

pp p

p

p

p

pp '='

pp p

pp p

pp p

p

pp '('

p

pp p

p

pp

pp p

p

p

p

pp '*'

p

pp '*'

p

pp p

p

pp '('

p

pp p

p

pp

pp p

p

p

p

pp '*'

pp '/'

p

p

pp '+' '-'

pp p

pp p

p

pp '('

p

pp p

p

pp

p

pp

pp

p

pp p

pp p

p

pp p

p

p

p

pp 'E'

p

p

pp '*'

pp '/'

p

p

pp '+' '-'

p

p

pp p

pp p

p

p

pp TO

p

pp p

pp p

p

pp p

pp p

pp p

p

pp '('

p

pp p

p

pp

pp p

p

p

p

pp '*'

pp '/'

p

p

pp '+' '-'

pp p

pp p

p

pp '('

p

pp p

p

pp

p

pp

pp

p

pp p

pp p

p

p

p

pp 'E'

p

p

pp '*'

p

pp '*'

p

pp p

p

pp '('

p

pp p

p

pp

pp p

p

p

p

pp '*'

pp '/'

p

p

pp '+' '-'

p

p

pp p

pp p

p


:

#include

#include

#include

#include

#include

#include "kuriface.h" //p

#define FALSE 0

#define TRUE 1

int cur_str=0; // p

int num_err=0; // -

char next; //

int open_file(void);

void instr(void);

char* reading(void);

int var(void);

void expr(void);

void term(void);

void operand(void);

void error(int);

void sc(void);

void unsc(void);

void del_space(void);

int dc(void);

int cbz(void);

void next_lex(void);

/*******************************************************************/

/* */

/* p ࠠ */

/* */

/*******************************************************************/

int open_file(void)

{

draw_window(20,10,60,14,0,7,"p");

gotoxy(5,2);

cprintf(" :");

textbackground(BLUE);

textcolor(WHITE);

window(22,13,58,13);

clrscr();

gotoxy(1,1);

_setcursortype(_NORMALCURSOR);

if(filename[0]!='n') fclose(fd);

gets(filename);

_setcursortype(_NOCURSOR);

if ((fd = fopen(filename,"rt"))==NULL)

{

draw_window(20,10,60,14,14,12,"");

gotoxy(12,2);

cprintf("H p ");

gotoxy(13,4);

cprintf("H ");

getch();

return(FALSE); // p -

}

return(TRUE); // p -

}

/***************************************************************************/

/* */

/* p ࠠ */

/* */

/***************************************************************************/

void load(void)

{

if(open_file()==FALSE) // p

{

window(1,1,80,24);

textbackground(BLACK);

clrscr();

return;

}

fseek(fd,0,0);

num_err=0; //

cur_str=0; //

next=0; //

display(); // p

fseek(fd,0,0);

while(next!=EOF) //

{

cur_str++;

instr();

}

getch();

window(1,1,80,24);

textbackground(BLACK);

clrscr();

}

/***************************************************************/

/* */

/* ࠠ */

/* */

/***************************************************************/

char* reading()

{

int i=0;

char* temp;

char buf;

temp=(char*)malloc(250);

buf=fgetc(fd);

while(isalpha(buf)) //

{

temp[i]=buf;

i++;

buf=fgetc(fd);

}

ungetc(buf,fd);

temp[i]=NULL;

return(temp);

}

/************************************************************/

/* */

/* pp */

/* */

/************************************************************/

void instr(void)

{

int i;

char* temp;

del_space(); // p p

sc(); // p

if(next==EOF||next=='n') return; // pp p

unsc(); // p

temp=reading(); //

if(strcmp(temp,"FOR")!=NULL) // pp p

{

error(3); // p -

next_lex(); // p

}

del_space(); // p p

if(var()==FALSE) error(4); // pp p

sc(); // p

if(next!='=') error(6); // pp '='

expr(); // pp p

del_space(); // p p

temp=reading(); //

if(strcmp(temp,"TO")!=NULL) // pp p

{

error(2); // p -

next_lex(); // p

}

del_space(); // p p

expr(); // pp p

del_space(); // p p

if(next==EOF||next=='n') return; // pp p

temp=reading(); //

if(strcmp(temp,"STEP")==NULL) // pp p

{ // p

del_space(); // p p

expr(); // pp p

}

del_space(); // p p

if(next!='n') // pp p

{

error(1); // -

sc();

while(next!='n') sc(); // p

unsc();

}

}

/************************************************************/

/* */

/* p */

/* */

/************************************************************/

int var(void)

{

sc();

if(isalpha(next)) //

{ //

while(isalnum(next)) sc();

unsc();

return(TRUE);

}

else

{

unsc();

return(FALSE);

}

}

/**********************************************************/

/* */

/* p p堠 */

/* */

/**********************************************************/

void expr(void)

{

term();

sc();

while(next=='+'||next=='-') // '+' '-'

{

term(); // pp p

sc();

}

unsc();

}

/***********************************************************/

/* */

/* p젠 */

/* */

/***********************************************************/

void term(void)

{

operand(); // pp p

sc();

while(next=='*') // '*'

{

sc();

if(next!='*') unsc(); // '**'

operand(); // pp p

sc();

}

while(next=='/') // '/'

{

operand(); // pp p

sc();

}

unsc();

}

/********************************************************/

/* */

/* p䠠 */

/* */

/********************************************************/

void operand(void)

{

sc();

if(next=='(') // '('

{

expr(); // pp p

sc();

if(next!=')') // ')'

{

unsc();

error(5); //

return;

}

else return; // p p

}

unsc();

if(var()==TRUE) return; // p - p

if(cbz()==TRUE) return; // - p

error(7); // -

}

/***********************************************************/

/* */

/* ࠠ */

/* */

/***********************************************************/

int cbz(void)

{

if (dc()==FALSE) return(FALSE); // p

sc();

if(next=='E') // 'E'

{

sc();

if(isdigit(next))

{

while(isdigit(next)) sc(); // p

unsc();

return(TRUE); // p

}

return(FALSE); // p

}

unsc();

return(TRUE);

}

/********************************************************/

/* */

/*  */

/* */

/********************************************************/

int dc(void)

{

int i=0;

sc();

if(isdigit(next))

{

while(isdigit(next)) // p

{

sc(); //

if(next=='.'&&i!=1) // '.'

{

i=1;

sc(); //

}

}

unsc();

return(TRUE);

}

else

{

unsc();

return(FALSE);

}

}

/**************************************************/

/* */

/* p ꠠ */

/* */

/**************************************************/

void error(int i)

{

num_err++; //

gotoxy(1,num_err);

switch(i)

{

case 1: cprintf("%d . p",cur_str);

break;

case 2: cprintf("%d . TO",cur_str);

break;

case 3: cprintf("%d . FOR",cur_str);

break;

case 4: cprintf("%d . ",cur_str);

break;

case 5: cprintf("%d . ')'",cur_str);

break;

case 6: cprintf("%d . '='",cur_str);

break;

case 7: cprintf("%d . , - - ",cur_str);

break;

case 8: cprintf("%d . ",cur_str);

}

}

/*****************************************************/

/* */

/* ࠠ */

/* */

/*****************************************************/

void sc(void)

{

next=fgetc(fd);

}

/*******************************************************/

/* */

/* p ꠠ */

/* */

/*******************************************************/

void unsc(void)

{

ungetc(next,fd);

}

/*************************************************/

/* */

/* p ࠠ */

/* */

/************************************************/

void next_lex(void)

{

sc();

while(next!=' ') sc(); // 1- p

unsc();

}

/**********************************************/

/* */

/* p⠠ */

/* */

/**********************************************/

void del_space(void)

{

char liter;

liter=fgetc(fd);

while((isspace(liter))) liter=fgetc(fd); // p

ungetc(liter,fd);

}

void main()

{

clrscr();

for (;;) //

{

switch (menu(27,8,"p ",ss)) //

{

case 0 : about();

break;

case 1 : grammatic();

break;

case 2 : language();

break;

case 3 : load();

break;

default : quit();

}

}

}

, . . FOR

 

 

 

! , , , .
. , :