, : ; , ; "" , .
1) :
à struct lex {int class; int value;};
à , - getlex struct lex getlex (void);
à struct lex curr_lex , .
2) :
int id (void); - 1, curr_lex.class = 4, .. curr_lex , 0 - ;
int num (void); - 1, curr_lex.class = 3, .. curr_lex -, 0 - ;
int eq (char * s); - 1, curr_lex s, 0 - ;
void error(void) - ; .
, :
P program D'; B^
void P (void){
if (eq ("program")) curr_lex = getlex();
else ERROR();
D1();
if (eq (";")) curr_lex = getlex(); else ERROR();
B();
if (!eq ("^")) ERROR();
}
D' var D {, D}
void D1 (void){
if (eq ("var")) curr_lex = getlex();
else ERROR();
D();
while (eq (","))
{curr_lex = getlex (); D();}
}
D I {,I}: [ int | bool ]
void D (void){
if (!id()) ERROR();
else {curr_lex = getlex();
while (eq (","))
{curr_lex = getlex();
if (!id()) ERROR();
else curr_lex = getlex ();
}
if (!eq (":")) ERROR();
else {curr_lex = getlex();
if (eq ("int") || eq ("bool"))
curr_lex = getlex();
else ERROR();}
}
}
E1 T {[ + | - | or ] T}
void E1 (void){
T();
while (eq ("+") || eq ("-") || eq ("or"))
{curr_lex = getlex(); T();}
}
.
"" :
... curr_lex = getlex(); P();...
- , , , .
:
a) , ;
|
|
b) ;
c) , ; ; ; ..
. , (, ), .
: , , . , , .
, - "" ( ). , , , -. , .
: , - , -.
,
A a < D1 > B < D1;D2 > | bC < D3 >,
A,B,C Î VN; a,b Î VT; < Di > Di, i = 1, 2, 3. , , :
void A() {
if (c=='a') {c = fgetc(fp); D1(); B(); D1(); D2();}
else if (c == 'b') {c = fgetc(fp); C(); D3();}
else ERROR();
}
: , L = {a Î (0,1)+^ | a 0 1}.
, , . 0 1, 0 1:
S < k0 = 0; k1 = 0; > A^
A 0 < k0 = k0+1 > A | 1 < k1 = k1+1 > A |
0 < k0 = k0+1; check() > | 1 < k1 = k1+1; check() >,
void check()
{ if (k0!= k1) { printf("ERROR!!!"); exit(1);}
else { printf("SUCCESS!!!\n");exit(0);}
}
, .