Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 [ 62 ] 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97

procedure Greater; begin Next;

if Token = = then begin

NextExpression;

SetGreaterOrEqual;

end else begin

CompareExpression;

SetGreater; end; end;

{ Parse and Translate a Relation }

procedure Relation;

begin

Expression;

if IsRelop(Token) then begin Push;

case Token of =: Equal; <: Less; >: Greater; end; end; end;

{ Parse and Translate a Boolean Factor with Leading NOT }

procedure NotFactor;

begin

if Token = ! then begin

Next; Relation; NotIt; end else

Relation;

end;

{ Parse and Translate a Boolean Term }

procedure BoolTerm;

begin

NotFactor;

while Token = & do begin Push; Next;

NotFactor; PopAnd; end; end;

{ Recognize and Translate a Boolean OR }

procedure BoolOr;

begin

Next;

BoolTerm;

PopOr; end;

{ Recognize and Translate an Exclusive Or }



procedure BoolXor; begin

Next; BoolTerm; PopXor; end;

{ Parse and Translate a Boolean Expression }

procedure BoolExpression;

begin

BoolTerm;

while IsOrOp(Token) do begin Push;

case Token of

j: BoolOr;

BoolXor;

end; end; end;

{ Parse and Translate an Assignment Statement } procedure Assignment; var Name: string; begin

CheckTable(Value);

Name := Value; Next;

MatchString(=); BoolExpression; Store(Name); end;

{ Recognize and Translate an IF Construct } procedure Block; Forward; procedure DoIf; var L1, L2: string; begin Next;

BoolExpression; L1 := NewLabel; L2 := L1; BranchFalse(L1); Block;

if Token = l then begin

Next;

L2 := NewLabel; Branch(L2); PostLabel(L1); Block;

end;

PostLabel(L2);

MatchString(ENDIF); end;

{ Parse and Translate a WHILE Statement } procedure DoWhile; var L1, L2: string; begin

Next;

L1 := NewLabel;



L2 := NewLabel;

PostLabel(L1); BoolExpression; BranchFalse(L2); Block;

MatchString(ENDWHILE);

Branch(L1);

PostLabel(L2);

end;

{ Read a Single Variable } procedure ReadVar; begin

CheckIdent;

CheckTable(Value);

ReadIt(Value);

Next; end;

{ Process a Read Statement } procedure DoRead; begin Next;

MatchString((); ReadVar;

while Token = , do begin

Next; ReadVar; end;

MatchStringC)); end;

{ Process a Write Statement } procedure DoWrite; begin Next;

MatchString(();

Expression;

WriteIt;

while Token = , do begin

Next;

Expression; WriteIt; end;

MatchStringC)); end;

{ Parse and Translate a Block of Statements } procedure Block; begin Scan;

while not(Token in [e, l]) do begin case Token of i: DoIf; w: DoWhile; R: DoRead; W: DoWrite;

else Assignment;

end;

Scan;



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 [ 62 ] 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97