PROGRAM
  BEGIN
    VAR
      IDENT: i
        ;
      IDENT: j
        ;
      IDENT: k
      IDENT
        IDENT: integer

      ;
    VAR
      IDENT: x
        ;
      IDENT: y
        ;
      IDENT: z
      IDENT
        IDENT: real

      ;
    VAR
      IDENT: s
      IDENT
        IDENT: string

      ;
    VAR
      IDENT: a
        ;
      IDENT: b
        ;
      IDENT: c
      IDENT
        IDENT: boolean

      ;
    PROCEDURE
      IDENT: f
      COLON
        IDENT: x
        IDENT
          IDENT: real

        ;
      COLON
        IDENT: s
        IDENT
          IDENT: string

        ;
      COLON
        IDENT: a
        IDENT
          IDENT: boolean

      IDENT
        IDENT: integer

      BEGIN
        null
        IF
          GTR
            AND
              IDENT: a
              IDENT: x
            INT: 0
          IF
            EQ
              OR
                IDENT: a
                IDENT: x
              IDENT: abc
            ASSMNT
              IDENT: f
              IDENT: a
            ASSMNT
              IDENT: f
              PLUS
                IDENT: a
                INT: 1
          null
      ;
    PROCEDURE
      IDENT: g
      null
      IDENT
        IDENT: IntArray

      BEGIN
        VAR
          IDENT: a0
          ARRAY
            INT: 0
            IDENT
              IDENT: integer

          ;
        VAR
          IDENT: a1
          ARRAY
            INT: 10
            IDENT
              IDENT: integer

          ;
        VAR
          IDENT: a2
          ARRAY
            INT: 10
            ARRAY
              INT: 20
              ARRAY
                INT: 30
                IDENT
                  IDENT: integer

        ASSMNT
          IDENT: g
          IDENT: a0
          ;
        EOF
    ASSMNT
      IDENT: i
      MINUS
        PLUS
          IDENT: j
          TIMES
            IDENT: k
            INT: 10
        PROCEDURE
          IDENT: f
          IDENT: x
            ;
          IDENT: s
            ;
          IDENT: a
      ;
    PROCEDURE
      IDENT: print
      IDENT: i
      ;
    EOF

Level 0 Symtab Contents:
  Symbol: a, Type: IDENT, is ref: false, mem loc: 0
  Symbol: g, Type: IDENT
    Level 1 Symtab Contents:
    Symbol: a2, Type: ARRAY, is ref: false, mem loc: 0
    Symbol: a1, Type: ARRAY, is ref: false, mem loc: 0
    Symbol: a0, Type: ARRAY, is ref: false, mem loc: 0

  Symbol: b, Type: IDENT, is ref: false, mem loc: 0
  Symbol: f, Type: IDENT
  Formals: COLON
            IDENT: x
            IDENT
              IDENT: real

            ;
          COLON
            IDENT: s
            IDENT
              IDENT: string

            ;
          COLON
            IDENT: a
            IDENT
              IDENT: boolean


    Level 1 Symtab Contents:
    Symbol: a, Type: IDENT, is ref: false, mem loc: 0
    Symbol: s, Type: IDENT, is ref: false, mem loc: 0
    Symbol: x, Type: IDENT, is ref: false, mem loc: 0

  Symbol: c, Type: IDENT, is ref: false, mem loc: 0
  Symbol: z, Type: IDENT, is ref: false, mem loc: 0
  Symbol: y, Type: IDENT, is ref: false, mem loc: 0
  Symbol: x, Type: IDENT, is ref: false, mem loc: 0
  Symbol: i, Type: IDENT, is ref: false, mem loc: 0
  Symbol: s, Type: IDENT, is ref: false, mem loc: 0
  Symbol: k, Type: IDENT, is ref: false, mem loc: 0
  Symbol: j, Type: IDENT, is ref: false, mem loc: 0