- 4


 

void T()

{ while (1)

{ F();

if (!(s[i]==* || s[i]==/)) break;

i++;

}

}

 

(sindown1.cpp), , , , . , , .

 

int VAR[26]; // A..Z

char S[100]; //

int i; //

void error(int n, int i); //

// n i

extern int E();

int F() // F ::= a..z | | (E)

{ int x;

if (isdigit(S[i]))

{ x=0; //

do { x=x * 10 + S[i] - 0; i++; }

while (isdigit(S[i])); return(x); }

else

if (isalpha(S[i])) //

{ x=VAR[toupper(S[i])-A]; i++; return(x); }

else

if (S[i]==() //

{ i++; x=E();

if (S[i]==)) { i++; return(x); }}

else { error(2,i); return(0); }}

int T() // T ::= T * F | T / F | F

{ int x; x=F();

while (1)

switch (S[i]) {

case *: i++; x=x*F(); break;

case /: i++; x=x/F(); break;

default: return(x); }}

 

int E() // E ::= E + T | E - T | T

{ int x; x=T();

while (1)

switch (S[i]) {

case +: i++; x=x+T(); break;

case -: i++; x=x-T(); break;

default: return(x); }}

 

//

int P() // P ::= E=>az | E=E | E>E | E<E | E#E

{ int x; x=E();

switch (S[i]) {

case =: i++;

if (S[i]==>)

{ i++;

if (isalpha(S[i]))

{ VAR[toupper(S[i])-A] = x;

return(x); }

else { error(4,i); return(0); }

}

else return( x== E() );

case #: i++; return( x!= E() );

case <: i++; return( x < E() );

case >: i++; return( x > E() );

case \0: return(x);

default: error(3,i); return(0); }}