
'BEGIN'

    'COMMENT' library 1;

    'INTEGER' 
        i, 
        case; 
    'BOOLEAN' 
        b; 
    'REAL' 
        x; 
    'INTEGER' 'PROCEDURE' p(k, q); 
        'VALUE' 
            k; 
        'INTEGER' 
            k; 
        'INTEGER' 'PROCEDURE' 
            q; 
        p := 
            'IF' k = 1 'THEN' 
                q(i)
            'ELSE' 'IF' k = 2 'THEN' 
                q(b)
            'ELSE' 'IF' k = 3 'THEN' 
                q(x)
            'ELSE'
                q(q(20)); 

    'INTEGER' 'PROCEDURE' q1(i); 
        'VALUE' 
            i; 
        'INTEGER' 
            i; 
        q1 := 100 + i; 

    'INTEGER' 'PROCEDURE' q2(b); 
        'VALUE' 
            b; 
        'BOOLEAN' 
            b; 
        q2 := 200 + ('IF' b 'THEN' 1 'ELSE' 0); 

    'INTEGER' 'PROCEDURE' q3(x); 
        'VALUE' 
            x; 
        'REAL' 
            x; 
        q3 := 300 + x; 

    'PROCEDURE' fail(m, n); 
        'VALUE' 
            m, 
            n; 
        'INTEGER' 
            m, 
            n; 
        'IF' m \= n 'THEN' 
            'BEGIN'
            outreal(1, m); 
            outreal(1, n); 
            outreal(1, case)
            'END' 
        'ELSE'
            case := case + 1; 

    i := 1; 
    x := 10.4; 
    case := 0; 
    b := 'FALSE'; 
    fail(p(1, q1), 101); 
    fail(p(4, q1), 220); 
    fail(p(2, q2), 200); 
    fail(p(3, q3), 310); 
    fail(p(4, q3), 620); 
    outreal(1, case)
'END' 


!ALGOL

'BEGIN'

    'COMMENT' library 3;

    'INTEGER' 
        i, 
        case; 
    'BOOLEAN' 
        b; 
    'REAL' 
        x; 
    'INTEGER' 'PROCEDURE' p(k, q); 
        'VALUE' 
            k; 
        'INTEGER' 
            k; 
        'INTEGER' 'PROCEDURE' 
            q; 
        p := 
            'IF' k = 1 'THEN' 
                q(i)
            'ELSE' 'IF' k = 2 'THEN' 
                q
            'ELSE' 'IF' k = 3 'THEN' 
                q(x)
            'ELSE'
                q(q(20)); 

    'INTEGER' 'PROCEDURE' q1(i); 
        'VALUE' 
            i; 
        'INTEGER' 
            i; 
        q1 := 100 + i; 

    'INTEGER' 'PROCEDURE' q2; 
        q2 := 200 + ('IF' b 'THEN' 1 'ELSE' 0); 

    'INTEGER' 'PROCEDURE' q3(x); 
        'VALUE' 
            x; 
        'REAL' 
            x; 
        q3 := 300 + x; 

    'PROCEDURE' fail(m, n); 
        'VALUE' 
            m, 
            n; 
        'INTEGER' 
            m, 
            n; 
        'IF' m \= n 'THEN' 
            'BEGIN'
            outreal(1, m); 
            outreal(1, n); 
            outreal(1, case)
            'END' 
        'ELSE'
            case := case + 1; 

    i := 1; 
    x := 10.4; 
    case := 0; 
    b := 'FALSE'; 
    fail(p(1, q1), 101); 
    fail(p(4, q1), 220); 
    fail(p(2, q2), 200); 
    fail(p(3, q3), 310); 
    fail(p(4, q3), 620); 
    outreal(1, case)
'END' 


!ALGOL

'BEGIN'

    'COMMENT' library 1;


    'INTEGER' 
        i, 
        j, 
        k, 
        k1;
    'REAL' 
        t1, 
        t2; 
    'INTEGER' 'PROCEDURE' ackermann(m, n); 
        'VALUE' 
            m, 
            n; 
        'INTEGER' 
            m, 
            n; 
        ackermann := 
            'IF' m = 0 'THEN' 
                n + 1
            'ELSE' 'IF' n = 0 'THEN' 
                ackermann(m - 1, 1)
            'ELSE'
                ackermann(m - 1, ackermann(m, n - 1)); 

    k := 16; 
    k1 := 1;
    'FOR' i := 1 'STEP' 1 'UNTIL' 6 'DO'
        'BEGIN'
        t1 := cputime; 
        j := ackermann(3, i); 
        t2 := cputime; 
        'IF' j \= k - 3 'THEN' 
            'BEGIN'
            outreal(1, i); 
            outreal(1, j)
            'END'; 
        outreal(1, t2 - t1); 
        outreal(1, 3 * (t2 - t1) / (512 * k1 - 15 * k + 9 * i + 37) );
        k1 := 4 * k1;
        k := 2 * k; 
        'END' 
'END' 



!ALGOL

'BEGIN'

    'COMMENT' library 1;

    'INTEGER' 
        n; 
    n := 3; 
    'BEGIN'
        'ARRAY' 
            a[1 : 'IF' n = 3 'THEN' 3 'ELSE' - 100]; 
        'INTEGER' 
            n; 
        n := 2; 
        outreal(1, n); 
    'END'; 
    outreal(1, n)
'END' 


!ALGOL

'BEGIN'

    'COMMENT' library 9;


    'INTEGER' 'ARRAY' 
        eq[1 : 3]; 
    'INTEGER' 
        i; 
    'REAL' 
        x, 
        y; 
    'PROCEDURE' inc(a, b); 
        'VALUE' 
            a, 
            b; 
        'REAL' 
            a, 
            b; 
        'IF' a < b 'THEN' 
            eq[1] := eq[1] + 1
        'ELSE' 'IF' a = b 'THEN' 
            eq[2] := eq[2] + 1
        'ELSE'
            eq[3] := eq[3] + 1; 

     
     
    'FOR' i := 1 'STEP' 1 'UNTIL' 3 'DO'
        eq[i] := 0; 
    'FOR' i := 2 'STEP' 1 'UNTIL' 100 'DO'
        'BEGIN'
        inreal(2, x); 
        y := 1 / (i * i - 1); 
        outreal(1, y); 
        inc(x, y)
        'END'; 
    'FOR' i := 1 'STEP' 1 'UNTIL' 3 'DO'
        outreal(1, eq[i]); 
     
     
'END' 


!ALGOL

'BEGIN'

    'COMMENT' library 1;

    'REAL' 
        x, 
        y; 
    'INTEGER' 
        i, 
        j; 
    'ARRAY' 
        a[1 : 10]; 
    x := y := 1.0; 
    i := j := 0; 
    'BEGIN'
        'PROCEDURE' p; 
            'BEGIN'
            x := 20; 
            i := x + y; 
            q(a[3], i + j)
            'END'; 

        'PROCEDURE' q(l, k); 
            'VALUE' 
                k; 
            'LABEL' 
                l; 
            'INTEGER' 
                k; 
            'IF' k = 0 'THEN' 
                'GOTO' l; 

        'SWITCH' a := 
            a1, 
            a2, 
            a3; 
        'INTEGER' 'PROCEDURE' j; 
            j := y; 

        'REAL' 
            i; 
        'REAL' 'PROCEDURE' y; 
            y := x; 

        'INTEGER' 
            x; 
        a1 :; 
        x := 10; 
        q(a[2], y - x); 
        a2 :; 
        p; 
        'IF' i = 0 'OR' j = 0 'OR' x = 1.0 'OR' y = 1.0 'THEN' 
            outreal(1, 100); 
        a3 :; 
    'END'; 
    'IF' i = 0 'AND' j = 0 'AND' x = 1.0 'AND' y = 1.0 'THEN' 
        outreal(1, 0)
'END' 



!ALGOL

'BEGIN'

    'COMMENT' library 1;

    'INTEGER' 
        sum; 
    'PROCEDURE' p1(s, r, i, b, ra, ia); 
        'STRING' 
            s; 
        'REAL' 
            r; 
        'INTEGER' 
            i; 
        'BOOLEAN' 
            b; 
        'REAL' 'ARRAY' 
            ra; 
        'INTEGER' 'ARRAY' 
            ia; 
        sum := sum + r + i + ('IF' b 'THEN' 1 'ELSE' 0) + ra[1] +
            ia[1]; 

    'PROCEDURE' p2(ba, l, sw, pr, rpr, ipr, bpr); 
        'BOOLEAN' 'ARRAY' 
            ba; 
        'LABEL' 
            l; 
        'SWITCH' 
            sw; 
        'PROCEDURE' 
            pr; 
        'REAL' 'PROCEDURE' 
            rpr; 
        'INTEGER' 'PROCEDURE' 
            ipr; 
        'BOOLEAN' 'PROCEDURE' 
            bpr; 
        'BEGIN'
        pr; 
        sum := sum + rpr + ipr; 
        'IF' bpr 'THEN' 
            'GOTO' l; 
        'IF' ba[1] 'THEN' 
            'GOTO' sw[2]
        'END'; 

    'PROCEDURE' p3(r, i, b, ra, ia, ba, l); 
        'VALUE' 
            r, 
            i, 
            b, 
            ra, 
            ia, 
            ba, 
            l; 
        'REAL' 
            r; 
        'INTEGER' 
            i; 
        'BOOLEAN' 
            b; 
        'REAL' 'ARRAY' 
            ra; 
        'INTEGER' 'ARRAY' 
            ia; 
        'BOOLEAN' 'ARRAY' 
            ba; 
        'LABEL' 
            l; 
        'BEGIN'
        sum := sum + r + i + ra[1] + ia[1] + ('IF' b 'THEN' 1
            'ELSE' 0) + ('IF' ba[1] 'THEN' 1 'ELSE' 0); 
        'IF' ba[1] 'THEN' 
            'GOTO' l
        'END'; 

    'REAL' 
        r; 
    'BOOLEAN' 
        b; 
    'REAL' 'ARRAY' 
        ra[1 : 1]; 
    'INTEGER' 'ARRAY' 
        ia[1 : 1]; 
    'BOOLEAN' 'ARRAY' 
        ba[1 : 1]; 
    'INTEGER' 'PROCEDURE' ipr; 
        ipr := 2 * sum; 

    'REAL' 'PROCEDURE' rpr; 
        rpr := 3 * sum; 

    'BOOLEAN' 'PROCEDURE' bpr; 
        bpr := 'NOT' b; 

    'PROCEDURE' pr; 
        sum := 5 * sum + 1; 

    'SWITCH' ss := 
        work, 
        fail; 
    sum := 0; 
    ia[1] := - 2; 
    ra[1] := 3.55; 
    ba[1] := 'FALSE'; 
    b := 'TRUE'; 
    r := 6.4; 
    p1( {ab}, r, sum, b, ra, ia); 
    'IF' sum \= 9 'THEN' 
        outreal(1, sum); 
    p2(ba, ss[2], ss, pr, rpr, ipr, bpr); 
    'IF' sum \= 276 'THEN' 
        outreal(1, sum); 
    work :; 
    outreal(1, 0); 
    p3(4.6, - 200, 'TRUE', ra, ia, ba, 'IF' 'TRUE' 'THEN' ss[2] 'ELSE'
        fail); 
    'IF' sum \= 83 'THEN' 
        outreal(1, sum); 
    p1( {cd}, rpr, ipr, bpr, ra, ia); 
    'IF' sum \= 500 'THEN' 
        outreal(1, sum); 
    p3(rpr, ipr, bpr, ra, ia, ba, fail); 
    'IF' sum \= 3002 'THEN' 
        outreal(1, sum); 
    'IF' 'FALSE' 'THEN' 
        fail : outreal(1, - 1); 
'END' 


!ALGOL

'BEGIN'

    'COMMENT' library 1;

    'INTEGER' 
        sum; 
    'PROCEDURE' p1(s, r, i, b, ra, ia); 
        'STRING' 
            s; 
        'REAL' 
            r; 
        'INTEGER' 
            i; 
        'BOOLEAN' 
            b; 
        'REAL' 'ARRAY' 
            ra; 
        'INTEGER' 'ARRAY' 
            ia; 
        sum := sum + r + i + ('IF' b 'THEN' 1 'ELSE' 0) + ra[1] +
            ia[1]; 

    'PROCEDURE' p2(ba, l, sw, pr, rpr, ipr, bpr); 
        'BOOLEAN' 'ARRAY' 
            ba; 
        'LABEL' 
            l; 
        'SWITCH' 
            sw; 
        'PROCEDURE' 
            pr; 
        'REAL' 'PROCEDURE' 
            rpr; 
        'INTEGER' 'PROCEDURE' 
            ipr; 
        'BOOLEAN' 'PROCEDURE' 
            bpr; 
        'BEGIN'
        pr; 
        sum := sum + rpr + ipr; 
        'IF' bpr 'THEN' 
            'GOTO' l; 
        'IF' ba[1] 'THEN' 
            'GOTO' sw[2]
        'END'; 

    'PROCEDURE' p3(r, i, b, ra, ia, ba, l); 
        'VALUE' 
            r, 
            i, 
            b, 
            ra, 
            ia, 
            ba, 
            l; 
        'REAL' 
            r; 
        'INTEGER' 
            i; 
        'BOOLEAN' 
            b; 
        'REAL' 'ARRAY' 
            ra; 
        'INTEGER' 'ARRAY' 
            ia; 
        'BOOLEAN' 'ARRAY' 
            ba; 
        'LABEL' 
            l; 
        'BEGIN'
        sum := sum + r + i + ra[1] + ia[1] + ('IF' b 'THEN' 1
            'ELSE' 0) + ('IF' ba[1] 'THEN' 1 'ELSE' 0); 
        'IF' ba[1] 'THEN' 
            'GOTO' l
        'END'; 

    'REAL' 
        r; 
    'BOOLEAN' 
        b; 
    'REAL' 'ARRAY' 
        ra[1 : 1]; 
    'INTEGER' 'ARRAY' 
        ia[1 : 1]; 
    'BOOLEAN' 'ARRAY' 
        ba[1 : 1]; 
    'INTEGER' 'PROCEDURE' ipr; 
        ipr := 2 * sum; 

    'REAL' 'PROCEDURE' rpr; 
        rpr := 3 * sum; 

    'BOOLEAN' 'PROCEDURE' bpr; 
        bpr := 'NOT' b; 

    'PROCEDURE' pr; 
        sum := 5 * sum + 1; 

    'SWITCH' ss := 
        work, 
        fail; 
    sum := 0; 
    ia[1] := - 2; 
    ra[1] := 3.55; 
    ba[1] := 'FALSE'; 
    b := 'TRUE'; 
    r := 6.4; 
    p1(ra, {ab}, {ab}, {ab}, {ab}, {ab} ); 
    p1(ss, ra, ra, ra, ss, ss); 
    p1(pr, ss, ss, ss, pr, pr); 
    p1(ss[2], pr, pr, pr, ss[2], ss[2]); 
    p1('TRUE', ss[2], ss[2], ss[2], 'TRUE', 'TRUE'); 
    p1(r, 'FALSE', 'FALSE', r, r, r); 
    p2( {ab}, {ab}, {ab}, {ab}, {ab}, {ab}, {ab} ); 
    p2(ra, ra, ra, ra, ra, ra, ra); 
    p2(ss, ss, ss[2], ss, ss, ss, ss); 
    p2(pr, pr, pr, r, pr, pr, pr); 
    p2(fail, ss, fail, fail, fail, fail, fail); 
    p2('TRUE', 'TRUE', 'TRUE', 'TRUE', 'TRUE', 'TRUE', 'TRUE'); 
    p2(r, r, r, r, r, r, r); 
    p3( {ab}, {ab}, {ab}, {ab}, {ab}, {ab}, {ab} ); 
    p3(ra, ra, ra, r, r, r, ra); 
    p3(ss, ss, ss, ss, ss, ss, ss); 
    p3(pr, pr, pr, pr, pr, pr, pr); 
    p3(fail, fail, fail, fail, fail, fail, ss); 
    p3('TRUE', 'TRUE', r, 'TRUE', 'TRUE', 'TRUE', 'TRUE'); 
    p3('TRUE', 'TRUE', r, r, r, r, r); 
    work :; 
    'IF' 'FALSE' 'THEN' 
        fail : outreal(1, - 1); 
'END' 


!ALGOL

'BEGIN'
    'INTEGER' 
        i; 
    'REAL' 
        r; 
    'BOOLEAN' 
        b; 
    'ARRAY' 
        a1[1 : i + b], 
        a2[2 : 4, 5 : 7]; 
    'SWITCH' s := 
        'IF' r * p0 < 0 'THEN' l 'ELSE' l2; 
    'PROCEDURE' p0; 
        r := i 'DIV' r; 

    'PROCEDURE' p1(f); 
        'REAL' 
            f; 
        b := i + r; 

    l :; 
    b := i > s; 
    b := b 'OR' p0; 
    r := b + a1; 
    l2 :; 
    r := b 'AND' b; 
    i := p1(r); 
    'GOTO' b; 
    i; 
    p1(a2 / r); 
    r[i] := 5; 
    i := 
        'IF' b 'THEN' 
            s
        'ELSE'
            r; 
    p1('IF' b 'THEN' b 'ELSE' i - i); 
    r := b := b 'AND' b; 
    'FOR' i := b 'STEP' 1 'UNTIL' r 'DO'
        a1[s] := a2[2]; 
    a1 := 0; 
    'IF' r 'THEN' 
        'GOTO' l; 
    'FOR' p0 := 1, 
        2 'DO'
        a2[b, i] := 0; 
    'BEGIN'
        'ARRAY' 
            q[b : 1]; 

    'END'; 
    p1(i, r); 
    p1; 
'END' 




!ALGOL

'BEGIN'

    'COMMENT' library 1;

    'INTEGER' 
        i; 
    'INTEGER' 'ARRAY' 
        a[1 : 10]; 
    i := 1; 
    'FOR' a[i] := 1, 
        2, 
        3, 
        4, 
        5, 
        6, 
        7, 
        8, 
        9, 
        10 'DO'
        i := i + 1; 
    'FOR' i := 1 'STEP' 1 'UNTIL' 10 'DO'
        'IF' a[i] \= i 'THEN' 
            outreal(1, i); 
    outreal(1, 0)
'END' 


!KDF9
