.


:




:

































 

 

 

 





S I:= E | if E then S else E | while E do S | B | read (I) | write (E)

 

1) I:= E

: I E .

E ( ); I , , ( checkid()), :

 

void eqtype (void)

{ if (strcmp (spop (), spop ())) ERROR();}

 

, :

I < checkid() >:= E < eqtype() >

 

2)

if E then S else S | while E do S

: .

E ( ); , :

 

void eqbool (void)

{if (strcmp (spop(), "bool")) ERROR();}

 

:

if E < eqbool() > then S else S | while E < eqbool() > do S

 

- , .

D ( ):

 

#include <string.h>

#define MAXSIZE_TID 1000

#define MAXSIZE_TD 50

char * TD[MAXSIZE_TD];

struct record

{char *name;

int declare;

char *type;

/*... */

};

struct record TID [MAXSIZE_TID];

/* ERROR(), getlex(), id(), eq(char *),

struct lex curr_lex -

- */

void ERROR(void);

struct lex {int class; int value;};

struct lex curr_lex;

struct lex getlex (void);

int id (void);

int eq (char *s);

void ipush (int i);

int ipop (void);

 

void decid (int i, char *t)

{if (TID [i].declare) ERROR();

else {TID [i].declare = 1; strcpy (TID [i].type, t);}

}

void dec (char *t)

{int i;

while ((i = ipop())!= -1) decid (i,t);}

void D (void)

{ipush (-1);

if (!id()) ERROR();

else {ipush (curr_lex.value);

curr_lex = getlex ();

while (eq (","))

{curr_lex = getlex ();

if (!id ()) ERROR ();

else {ipush (curr_lex.value);

curr_lex = getlex();}

}

if (!eq (":")) ERROR();

else {curr_lex = getlex ();

if (eq ("int")) {curr_lex = getlex ();

dec ("int");}

else if (eq ("bool"))

{curr_lex = getlex();

dec ("bool");}

else ERROR();

}

}

}

.

 

49. ( , ) , .

 

a) S E^ b) S P:= E | if E then S | if E then S else S

E () | (E {, E}) | A P I | I (E)

A a | b E T {+T}

T F {*F}

F P | (E)

I a | b

 

c) S type I = T {; I = T} ^ d) S P = E | while E do S

T int | record I: T {; I: T} end P I | I (E {, E})

I a | b | c E E + T | T

T T * F | F

F P | (E)

I a | b | c

 

50. , .

 

a) S E^ b) S E^

E E+T | E-T | T E E+T | E-T | T

T T*P | P T T*F | T/F | F

P (E) | I F I | I^N | (E)

I a | b | c I a | b | c | d

N 2 | 3 | 4

 

c) F function I(I) S; I:=E end *d) S SaAb | Sb | bABa

S ; I:=E S | e A acAb | cA | e

E E*I | E+I | I B bB | e

 

*e) S Ac | dBea *f) S fASd | e

A Aa | Ab | daBc A Aa | Ab | dB | f

B cB | e B bcB | e

 

51. - , . ?

a) #include <stdio.h>

int c; FILE *fp;

void A();

void ERROR();

void S (void)

{if (c == 'a')

{c = fgetc(fp); S();

if (c == 'b') c = fgetc(fp);

else ERROR();

else A();

}

void A (void)

{if (c == 'b') c = fgetc(fp);

else ERROR();

while (c == 'b')

c = fgetc(fp);

}

void main()

{fp = fopen("data", "r");

c = fgetc(fp);

S();

printf("O.K.!");

}

*b) #include <stdio.h>

int c; FILE *fp;

void A();

void ERROR();

void S (void)

{ A(); if (c!= '^') ERROR();

}

void A (void)

{ B(); while (c == 'a') {c = fgetc(fp); B();}; B();

}

void B (void)

{ if (c == 'b') c = fgetc(fp);

}

 

void main()

{fp = fopen("data", "r");

c = fgetc(fp);

S();

printf("O.K.!");

}

 

52. , (. . 36-38), , .

 

53. ? (a,(b,a),(a,(b)),b)^.

 

S < k = 0 > E ^

E A | (< k=k+1; if (k == 3) ERROR(); > E {,E}) < k = k-1 >

A a | b

 

54. , {0, 1, 2, ^}:

S A^

A 0A | 1A | 2A | e

, , 002.

 

55. , {a, b, c, ^}:

S A^

A aA | bA | cA | e

, , :

à ;

à , b.

 

56. , {0, 1}:

S 0S | 1S | e

, , 101.

 

57. -
L = {am bn ck | m+k = n m-k = n}.

 

58. -
L = {1n 0m 1p | n+p > m, m >= 0}.

 

59. :

S < A = 0; B = 0 > L {L} < if (A > 5) ERROR() > ^

L a < A = A+1 > | b < B = B+1; if (B > 2) ERROR() > |

c < if (B == 1) ERROR() >

?

 

60. :

S E^

E () | (E {, E}) | A

A a | b

, :

1. ;

2. .

 

61. , :

a) L , ,

S for I = E step E to E do S

, :

1. I ;

2. .

.

 

*b)

P program D; begin S {; S } end

D ... | label L{,L} |...

S L {, L }: S` | S`

S` ...| goto L |...

L I

I -

, :

1. , , ;

2. ;

3. goto, , .

.

 

62.

P program D begin S {; S} end

D var D' {; D'}

D' I {, I}: record I: R {; I: R} end | I {, I}: R

R int | bool

S I:= E | I.I:= E

E T {+T}

T F {*F}

F I | (E) | I.I | N | L,

I - , N - , L - .

, :

1. , , ;

2. .

: ) ( );

b) .





:


: 2017-02-25; !; : 292 |


:

:

, , . , .
==> ...

803 - | 735 -


© 2015-2024 lektsii.org - -

: 0.035 .