Анимация
JavaScript
|
Главная Библионтека 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 |