--[[return
]]
function()
  return
end

--
--[[return 1
]]
function()
  return
    1
end

--
--[[return 42, 4.2, true, "hello"
]]
function()
  return
    42
   ,
    4.2000000000000002
   ,
    true
   ,
    'hello'
end

--
--[[return a
]]
function()
  return
    --[suffixed expr start] any
     --[primary start] any
       a --global symbol ? 
     --[primary end]
    --[suffixed expr end]
end

--
--[[return 1+2
]]
function()
  return
    --[binary expr start] integer
     1
    +
     2
    --[binary expr end]
end

--
--[[return 2^3-5*4
]]
function()
  return
    --[binary expr start] number
     --[binary expr start] number
      2
     ^
      3
     --[binary expr end]
    -
     --[binary expr start] integer
      5
     *
      4
     --[binary expr end]
    --[binary expr end]
end

--
--[[return 0.0
]]
function()
  return
    0.0000000000000000
end

--
--[[return 0
]]
function()
  return
    0
end

--
--[[return -0//1
]]
function()
  return
    --[binary expr start] integer
     --[unary expr start] integer
     -
      0
     --[unary expr end]
    //
     1
    --[binary expr end]
end

--
--[[return 3^-1
]]
function()
  return
    --[binary expr start] number
     3
    ^
     --[unary expr start] integer
     -
      1
     --[unary expr end]
    --[binary expr end]
end

--
--[[return (1 + 1)^(50 + 50)
]]
function()
  return
    --[binary expr start] number
     --[suffixed expr start] integer
      --[primary start] integer
       --[binary expr start] integer
        1
       +
        1
       --[binary expr end]
      --[primary end]
     --[suffixed expr end]
    ^
     --[suffixed expr start] integer
      --[primary start] integer
       --[binary expr start] integer
        50
       +
        50
       --[binary expr end]
      --[primary end]
     --[suffixed expr end]
    --[binary expr end]
end

--
--[[return (-2)^(31 - 2)
]]
function()
  return
    --[binary expr start] number
     --[suffixed expr start] integer
      --[primary start] integer
       --[unary expr start] integer
       -
        2
       --[unary expr end]
      --[primary end]
     --[suffixed expr end]
    ^
     --[suffixed expr start] integer
      --[primary start] integer
       --[binary expr start] integer
        31
       -
        2
       --[binary expr end]
      --[primary end]
     --[suffixed expr end]
    --[binary expr end]
end

--
--[[return (-3^0 + 5) // 3.0
]]
function()
  return
    --[binary expr start] any
     --[suffixed expr start] number
      --[primary start] number
       --[binary expr start] number
        --[unary expr start] number
        -
         --[binary expr start] number
          3
         ^
          0
         --[binary expr end]
        --[unary expr end]
       +
        5
       --[binary expr end]
      --[primary end]
     --[suffixed expr end]
    //
     3.0000000000000000
    --[binary expr end]
end

--
--[[return -3 % 5
]]
function()
  return
    --[binary expr start] integer
     --[unary expr start] integer
     -
      3
     --[unary expr end]
    %
     5
    --[binary expr end]
end

--
--[[return -((2.0^8 + -(-1)) % 8)/2 * 4 - 3
]]
function()
  return
    --[binary expr start] number
     --[binary expr start] number
      --[binary expr start] number
       --[unary expr start] number
       -
        --[suffixed expr start] number
         --[primary start] number
          --[binary expr start] number
           --[suffixed expr start] number
            --[primary start] number
             --[binary expr start] number
              --[binary expr start] number
               2.0000000000000000
              ^
               8
              --[binary expr end]
             +
              --[unary expr start] integer
              -
               --[suffixed expr start] integer
                --[primary start] integer
                 --[unary expr start] integer
                 -
                  1
                 --[unary expr end]
                --[primary end]
               --[suffixed expr end]
              --[unary expr end]
             --[binary expr end]
            --[primary end]
           --[suffixed expr end]
          %
           8
          --[binary expr end]
         --[primary end]
        --[suffixed expr end]
       --[unary expr end]
      /
       2
      --[binary expr end]
     *
      4
     --[binary expr end]
    -
     3
    --[binary expr end]
end

--
--[[return -((2^8 + -(-1)) % 8)//2 * 4 - 3
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[binary expr start] any
       --[unary expr start] number
       -
        --[suffixed expr start] number
         --[primary start] number
          --[binary expr start] number
           --[suffixed expr start] number
            --[primary start] number
             --[binary expr start] number
              --[binary expr start] number
               2
              ^
               8
              --[binary expr end]
             +
              --[unary expr start] integer
              -
               --[suffixed expr start] integer
                --[primary start] integer
                 --[unary expr start] integer
                 -
                  1
                 --[unary expr end]
                --[primary end]
               --[suffixed expr end]
              --[unary expr end]
             --[binary expr end]
            --[primary end]
           --[suffixed expr end]
          %
           8
          --[binary expr end]
         --[primary end]
        --[suffixed expr end]
       --[unary expr end]
      //
       2
      --[binary expr end]
     *
      4
     --[binary expr end]
    -
     3
    --[binary expr end]
end

--
--[[return 0xF0.0 | 0xCC.0 ~ 0xAA & 0xFD
]]
function()
  return
    --[binary expr start] integer
     240.0000000000000000
    |
     --[binary expr start] integer
      204.0000000000000000
     ~
      --[binary expr start] integer
       170
      &
       253
      --[binary expr end]
     --[binary expr end]
    --[binary expr end]
end

--
--[[return ~(~0xFF0 | 0xFF0)
]]
function()
  return
    --[unary expr start] any
    ~
     --[suffixed expr start] any
      --[primary start] any
       --[binary expr start] any
        --[unary expr start] any
        ~
         4080
        --[unary expr end]
       |
        4080
       --[binary expr end]
      --[primary end]
     --[suffixed expr end]
    --[unary expr end]
end

--
--[[return ~~-100024.0
]]
function()
  return
    --[unary expr start] any
    ~
     --[unary expr start] any
     ~
      --[unary expr start] number
      -
       100024.0000000000000000
      --[unary expr end]
     --[unary expr end]
    --[unary expr end]
end

--
--[[return ((100 << 6) << -4) >> 2
]]
function()
  return
    --[binary expr start] integer
     --[suffixed expr start] integer
      --[primary start] integer
       --[binary expr start] integer
        --[suffixed expr start] integer
         --[primary start] integer
          --[binary expr start] integer
           100
          <<
           6
          --[binary expr end]
         --[primary end]
        --[suffixed expr end]
       <<
        --[unary expr start] integer
        -
         4
        --[unary expr end]
       --[binary expr end]
      --[primary end]
     --[suffixed expr end]
    >>
     2
    --[binary expr end]
end

--
--[[return 2^3^2 == 2^(3^2)
]]
function()
  return
    --[binary expr start] boolean
     --[binary expr start] number
      2
     ^
      --[binary expr start] number
       3
      ^
       2
      --[binary expr end]
     --[binary expr end]
    ==
     --[binary expr start] number
      2
     ^
      --[suffixed expr start] number
       --[primary start] number
        --[binary expr start] number
         3
        ^
         2
        --[binary expr end]
       --[primary end]
      --[suffixed expr end]
     --[binary expr end]
    --[binary expr end]
end

--
--[[return 2^3*4 == (2^3)*4
]]
function()
  return
    --[binary expr start] boolean
     --[binary expr start] number
      --[binary expr start] number
       2
      ^
       3
      --[binary expr end]
     *
      4
     --[binary expr end]
    ==
     --[binary expr start] number
      --[suffixed expr start] number
       --[primary start] number
        --[binary expr start] number
         2
        ^
         3
        --[binary expr end]
       --[primary end]
      --[suffixed expr end]
     *
      4
     --[binary expr end]
    --[binary expr end]
end

--
--[[return 2.0^-2 == 1/4 and -2^- -2 == - - -4
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] boolean
      --[binary expr start] number
       2.0000000000000000
      ^
       --[unary expr start] integer
       -
        2
       --[unary expr end]
      --[binary expr end]
     ==
      --[binary expr start] number
       1
      /
       4
      --[binary expr end]
     --[binary expr end]
    and
     --[binary expr start] boolean
      --[unary expr start] number
      -
       --[binary expr start] number
        2
       ^
        --[unary expr start] integer
        -
         --[unary expr start] integer
         -
          2
         --[unary expr end]
        --[unary expr end]
       --[binary expr end]
      --[unary expr end]
     ==
      --[unary expr start] integer
      -
       --[unary expr start] integer
       -
        --[unary expr start] integer
        -
         4
        --[unary expr end]
       --[unary expr end]
      --[unary expr end]
     --[binary expr end]
    --[binary expr end]
end

--
--[[return not nil and 2 and not(2>3 or 3<2)
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[unary expr start] any
      not
       nil
      --[unary expr end]
     and
      2
     --[binary expr end]
    and
     --[unary expr start] any
     not
      --[suffixed expr start] any
       --[primary start] any
        --[binary expr start] any
         --[binary expr start] boolean
          2
         >
          3
         --[binary expr end]
        or
         --[binary expr start] boolean
          3
         <
          2
         --[binary expr end]
        --[binary expr end]
       --[primary end]
      --[suffixed expr end]
     --[unary expr end]
    --[binary expr end]
end

--
--[[return -3-1-5 == 0+0-9
]]
function()
  return
    --[binary expr start] boolean
     --[binary expr start] integer
      --[binary expr start] integer
       --[unary expr start] integer
       -
        3
       --[unary expr end]
      -
       1
      --[binary expr end]
     -
      5
     --[binary expr end]
    ==
     --[binary expr start] integer
      --[binary expr start] integer
       0
      +
       0
      --[binary expr end]
     -
      9
     --[binary expr end]
    --[binary expr end]
end

--
--[[return -2^2 == -4 and (-2)^2 == 4 and 2*2-3-1 == 0
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[binary expr start] boolean
       --[unary expr start] number
       -
        --[binary expr start] number
         2
        ^
         2
        --[binary expr end]
       --[unary expr end]
      ==
       --[unary expr start] integer
       -
        4
       --[unary expr end]
      --[binary expr end]
     and
      --[binary expr start] boolean
       --[binary expr start] number
        --[suffixed expr start] integer
         --[primary start] integer
          --[unary expr start] integer
          -
           2
          --[unary expr end]
         --[primary end]
        --[suffixed expr end]
       ^
        2
       --[binary expr end]
      ==
       4
      --[binary expr end]
     --[binary expr end]
    and
     --[binary expr start] boolean
      --[binary expr start] integer
       --[binary expr start] integer
        --[binary expr start] integer
         2
        *
         2
        --[binary expr end]
       -
        3
       --[binary expr end]
      -
       1
      --[binary expr end]
     ==
      0
     --[binary expr end]
    --[binary expr end]
end

--
--[[return -3%5 == 2 and -3+5 == 2
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] boolean
      --[binary expr start] integer
       --[unary expr start] integer
       -
        3
       --[unary expr end]
      %
       5
      --[binary expr end]
     ==
      2
     --[binary expr end]
    and
     --[binary expr start] boolean
      --[binary expr start] integer
       --[unary expr start] integer
       -
        3
       --[unary expr end]
      +
       5
      --[binary expr end]
     ==
      2
     --[binary expr end]
    --[binary expr end]
end

--
--[[return 2*1+3/3 == 3 and 1+2 .. 3*1 == "33"
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] boolean
      --[binary expr start] number
       --[binary expr start] integer
        2
       *
        1
       --[binary expr end]
      +
       --[binary expr start] number
        3
       /
        3
       --[binary expr end]
      --[binary expr end]
     ==
      3
     --[binary expr end]
    and
     --[binary expr start] any
      --[binary expr start] any
       --[binary expr start] integer
        1
       +
        2
       --[binary expr end]
      ..
       --[binary expr start] integer
        3
       *
        1
       --[binary expr end]
      --[binary expr end]
     ==
      '33'
     --[binary expr end]
    --[binary expr end]
end

--
--[[return not(2+1 > 3*1) and "a".."b" > "a"
]]
function()
  return
    --[binary expr start] any
     --[unary expr start] any
     not
      --[suffixed expr start] boolean
       --[primary start] boolean
        --[binary expr start] boolean
         --[binary expr start] integer
          2
         +
          1
         --[binary expr end]
        >
         --[binary expr start] integer
          3
         *
          1
         --[binary expr end]
        --[binary expr end]
       --[primary end]
      --[suffixed expr end]
     --[unary expr end]
    and
     --[binary expr start] any
      --[binary expr start] any
       'a'
      ..
       'b'
      --[binary expr end]
     >
      'a'
     --[binary expr end]
    --[binary expr end]
end

--
--[[return "7" .. 3 << 1 == 146
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[binary expr start] any
       '7'
      ..
       3
      --[binary expr end]
     <<
      1
     --[binary expr end]
    ==
     146
    --[binary expr end]
end

--
--[[return 10 >> 1 .. "9" == 0
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      10
     >>
      --[binary expr start] any
       1
      ..
       '9'
      --[binary expr end]
     --[binary expr end]
    ==
     0
    --[binary expr end]
end

--
--[[return 10 | 1 .. "9" == 27
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      10
     |
      --[binary expr start] any
       1
      ..
       '9'
      --[binary expr end]
     --[binary expr end]
    ==
     27
    --[binary expr end]
end

--
--[[return 0xF0 | 0xCC ~ 0xAA & 0xFD == 0xF4
]]
function()
  return
    --[binary expr start] boolean
     --[binary expr start] integer
      240
     |
      --[binary expr start] integer
       204
      ~
       --[binary expr start] integer
        170
       &
        253
       --[binary expr end]
      --[binary expr end]
     --[binary expr end]
    ==
     244
    --[binary expr end]
end

--
--[[return 0xFD & 0xAA ~ 0xCC | 0xF0 == 0xF4
]]
function()
  return
    --[binary expr start] boolean
     --[binary expr start] integer
      --[binary expr start] integer
       --[binary expr start] integer
        253
       &
        170
       --[binary expr end]
      ~
       204
      --[binary expr end]
     |
      240
     --[binary expr end]
    ==
     244
    --[binary expr end]
end

--
--[[return 0xF0 & 0x0F + 1 == 0x10
]]
function()
  return
    --[binary expr start] boolean
     --[binary expr start] integer
      240
     &
      --[binary expr start] integer
       15
      +
       1
      --[binary expr end]
     --[binary expr end]
    ==
     16
    --[binary expr end]
end

--
--[[return 3^4//2^3//5 == 2
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[binary expr start] any
       --[binary expr start] number
        3
       ^
        4
       --[binary expr end]
      //
       --[binary expr start] number
        2
       ^
        3
       --[binary expr end]
      --[binary expr end]
     //
      5
     --[binary expr end]
    ==
     2
    --[binary expr end]
end

--
--[[return -3+4*5//2^3^2//9+4%10/3 == (-3)+(((4*5)//(2^(3^2)))//9)+((4%10)/3)
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[binary expr start] any
       --[unary expr start] integer
       -
        3
       --[unary expr end]
      +
       --[binary expr start] any
        --[binary expr start] any
         --[binary expr start] integer
          4
         *
          5
         --[binary expr end]
        //
         --[binary expr start] number
          2
         ^
          --[binary expr start] number
           3
          ^
           2
          --[binary expr end]
         --[binary expr end]
        --[binary expr end]
       //
        9
       --[binary expr end]
      --[binary expr end]
     +
      --[binary expr start] number
       --[binary expr start] integer
        4
       %
        10
       --[binary expr end]
      /
       3
      --[binary expr end]
     --[binary expr end]
    ==
     --[binary expr start] any
      --[binary expr start] any
       --[suffixed expr start] integer
        --[primary start] integer
         --[unary expr start] integer
         -
          3
         --[unary expr end]
        --[primary end]
       --[suffixed expr end]
      +
       --[suffixed expr start] any
        --[primary start] any
         --[binary expr start] any
          --[suffixed expr start] any
           --[primary start] any
            --[binary expr start] any
             --[suffixed expr start] integer
              --[primary start] integer
               --[binary expr start] integer
                4
               *
                5
               --[binary expr end]
              --[primary end]
             --[suffixed expr end]
            //
             --[suffixed expr start] number
              --[primary start] number
               --[binary expr start] number
                2
               ^
                --[suffixed expr start] number
                 --[primary start] number
                  --[binary expr start] number
                   3
                  ^
                   2
                  --[binary expr end]
                 --[primary end]
                --[suffixed expr end]
               --[binary expr end]
              --[primary end]
             --[suffixed expr end]
            --[binary expr end]
           --[primary end]
          --[suffixed expr end]
         //
          9
         --[binary expr end]
        --[primary end]
       --[suffixed expr end]
      --[binary expr end]
     +
      --[suffixed expr start] number
       --[primary start] number
        --[binary expr start] number
         --[suffixed expr start] integer
          --[primary start] integer
           --[binary expr start] integer
            4
           %
            10
           --[binary expr end]
          --[primary end]
         --[suffixed expr end]
        /
         3
        --[binary expr end]
       --[primary end]
      --[suffixed expr end]
     --[binary expr end]
    --[binary expr end]
end

--
--[[return not ((true or false) and nil)
]]
function()
  return
    --[unary expr start] any
    not
     --[suffixed expr start] any
      --[primary start] any
       --[binary expr start] any
        --[suffixed expr start] any
         --[primary start] any
          --[binary expr start] any
           true
          or
           false
          --[binary expr end]
         --[primary end]
        --[suffixed expr end]
       and
        nil
       --[binary expr end]
      --[primary end]
     --[suffixed expr end]
    --[unary expr end]
end

--
--[[return true or false  and nil
]]
function()
  return
    --[binary expr start] any
     true
    or
     --[binary expr start] any
      false
     and
      nil
     --[binary expr end]
    --[binary expr end]
end

--
--[[return (((1 or false) and true) or false) == true
]]
function()
  return
    --[binary expr start] any
     --[suffixed expr start] any
      --[primary start] any
       --[binary expr start] any
        --[suffixed expr start] any
         --[primary start] any
          --[binary expr start] any
           --[suffixed expr start] any
            --[primary start] any
             --[binary expr start] any
              1
             or
              false
             --[binary expr end]
            --[primary end]
           --[suffixed expr end]
          and
           true
          --[binary expr end]
         --[primary end]
        --[suffixed expr end]
       or
        false
       --[binary expr end]
      --[primary end]
     --[suffixed expr end]
    ==
     true
    --[binary expr end]
end

--
--[[return (((nil and true) or false) and true) == false
]]
function()
  return
    --[binary expr start] any
     --[suffixed expr start] any
      --[primary start] any
       --[binary expr start] any
        --[suffixed expr start] any
         --[primary start] any
          --[binary expr start] any
           --[suffixed expr start] any
            --[primary start] any
             --[binary expr start] any
              nil
             and
              true
             --[binary expr end]
            --[primary end]
           --[suffixed expr end]
          or
           false
          --[binary expr end]
         --[primary end]
        --[suffixed expr end]
       and
        true
       --[binary expr end]
      --[primary end]
     --[suffixed expr end]
    ==
     false
    --[binary expr end]
end

--
--[[return -(1 or 2) == -1 and (1 and 2)+(-1.25 or -4) == 0.75
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[unary expr start] any
      -
       --[suffixed expr start] any
        --[primary start] any
         --[binary expr start] any
          1
         or
          2
         --[binary expr end]
        --[primary end]
       --[suffixed expr end]
      --[unary expr end]
     ==
      --[unary expr start] integer
      -
       1
      --[unary expr end]
     --[binary expr end]
    and
     --[binary expr start] any
      --[binary expr start] any
       --[suffixed expr start] any
        --[primary start] any
         --[binary expr start] any
          1
         and
          2
         --[binary expr end]
        --[primary end]
       --[suffixed expr end]
      +
       --[suffixed expr start] any
        --[primary start] any
         --[binary expr start] any
          --[unary expr start] number
          -
           1.2500000000000000
          --[unary expr end]
         or
          --[unary expr start] integer
          -
           4
          --[unary expr end]
         --[binary expr end]
        --[primary end]
       --[suffixed expr end]
      --[binary expr end]
     ==
      0.7500000000000000
     --[binary expr end]
    --[binary expr end]
end

--
--[[return (b or a)+1 == 2 and (10 or a)+1 == 11
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[binary expr start] any
       --[suffixed expr start] any
        --[primary start] any
         --[binary expr start] any
          --[suffixed expr start] any
           --[primary start] any
             b --global symbol ? 
           --[primary end]
          --[suffixed expr end]
         or
          --[suffixed expr start] any
           --[primary start] any
             a --global symbol ? 
           --[primary end]
          --[suffixed expr end]
         --[binary expr end]
        --[primary end]
       --[suffixed expr end]
      +
       1
      --[binary expr end]
     ==
      2
     --[binary expr end]
    and
     --[binary expr start] any
      --[binary expr start] any
       --[suffixed expr start] any
        --[primary start] any
         --[binary expr start] any
          10
         or
          --[suffixed expr start] any
           --[primary start] any
             a --global symbol ? 
           --[primary end]
          --[suffixed expr end]
         --[binary expr end]
        --[primary end]
       --[suffixed expr end]
      +
       1
      --[binary expr end]
     ==
      11
     --[binary expr end]
    --[binary expr end]
end

--
--[[return ((2<3) or 1) == true and (2<3 and 4) == 4
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[suffixed expr start] any
       --[primary start] any
        --[binary expr start] any
         --[suffixed expr start] boolean
          --[primary start] boolean
           --[binary expr start] boolean
            2
           <
            3
           --[binary expr end]
          --[primary end]
         --[suffixed expr end]
        or
         1
        --[binary expr end]
       --[primary end]
      --[suffixed expr end]
     ==
      true
     --[binary expr end]
    and
     --[binary expr start] any
      --[suffixed expr start] any
       --[primary start] any
        --[binary expr start] any
         --[binary expr start] boolean
          2
         <
          3
         --[binary expr end]
        and
         4
        --[binary expr end]
       --[primary end]
      --[suffixed expr end]
     ==
      4
     --[binary expr end]
    --[binary expr end]
end

--
--[[return (x>y) and x or y == 2
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[suffixed expr start] any
       --[primary start] any
        --[binary expr start] any
         --[suffixed expr start] any
          --[primary start] any
            x --global symbol ? 
          --[primary end]
         --[suffixed expr end]
        >
         --[suffixed expr start] any
          --[primary start] any
            y --global symbol ? 
          --[primary end]
         --[suffixed expr end]
        --[binary expr end]
       --[primary end]
      --[suffixed expr end]
     and
      --[suffixed expr start] any
       --[primary start] any
         x --global symbol ? 
       --[primary end]
      --[suffixed expr end]
     --[binary expr end]
    or
     --[binary expr start] any
      --[suffixed expr start] any
       --[primary start] any
         y --global symbol ? 
       --[primary end]
      --[suffixed expr end]
     ==
      2
     --[binary expr end]
    --[binary expr end]
end

--
--[[return (x>y) and x or y == 2
]]
function()
  return
    --[binary expr start] any
     --[binary expr start] any
      --[suffixed expr start] any
       --[primary start] any
        --[binary expr start] any
         --[suffixed expr start] any
          --[primary start] any
            x --global symbol ? 
          --[primary end]
         --[suffixed expr end]
        >
         --[suffixed expr start] any
          --[primary start] any
            y --global symbol ? 
          --[primary end]
         --[suffixed expr end]
        --[binary expr end]
       --[primary end]
      --[suffixed expr end]
     and
      --[suffixed expr start] any
       --[primary start] any
         x --global symbol ? 
       --[primary end]
      --[suffixed expr end]
     --[binary expr end]
    or
     --[binary expr start] any
      --[suffixed expr start] any
       --[primary start] any
         y --global symbol ? 
       --[primary end]
      --[suffixed expr end]
     ==
      2
     --[binary expr end]
    --[binary expr end]
end

--
--[[function x() for i = 1, 10 do; print(i); end end
]]
function()
   x --global symbol ? 
   =
    function()
    --locals  i
      for
        i --local symbol integer 
      =
        1
       ,
        10
      do
         --[expression statement start]
          --[expression list start]
            --[suffixed expr start] any
             --[primary start] any
               print --global symbol ? 
             --[primary end]
             --[suffix list start]
               --[function call start] any
                (
                  --[suffixed expr start] integer
                   --[primary start] integer
                     i --local symbol integer 
                   --[primary end]
                  --[suffixed expr end]
                )
               --[function call end]
             --[suffix list end]
            --[suffixed expr end]
          --[expression list end]
         --[expression statement end]
      end
    end
end

--
--[[function x() local a=1; function y() return function() return a end end; end
]]
function()
   x --global symbol ? 
   =
    function()
    --locals  a
      local
      --[symbols]
        a --local symbol ? 
      --[expressions]
        1
       y --global symbol ? 
       =
        function()
        --upvalues  a
          return
            function()
            --upvalues  a
              return
                --[suffixed expr start] any
                 --[primary start] any
                   a --upvalue ? 
                 --[primary end]
                --[suffixed expr end]
            end
        end
    end
end

--
--[[return @integer 1
]]
function()
  return
    --[unary expr start] integer
    @integer
     1
    --[unary expr end]
end

--
--[[return @string "hello"
]]
function()
  return
    --[unary expr start] string
    @string
     'hello'
    --[unary expr end]
end

--
--[[return @table {}
]]
function()
  return
    --[unary expr start] table
    @table
     { --[table constructor start] table
     } --[table constructor end]
    --[unary expr end]
end

--
--[[return @integer[] {}
]]
function()
  return
    --[unary expr start] integer[]
    @integer[]
     { --[table constructor start] integer[]
     } --[table constructor end]
    --[unary expr end]
end

--
--[[return @number[] {}
]]
function()
  return
    --[unary expr start] number[]
    @number[]
     { --[table constructor start] number[]
     } --[table constructor end]
    --[unary expr end]
end

--
--[[return @closure function() end
]]
function()
  return
    --[unary expr start] closure
    @closure
     function()
     end
    --[unary expr end]
end

--
--[[return @number 54.4
]]
function()
  return
    --[unary expr start] number
    @number
     54.3999999999999986
    --[unary expr end]
end

--
--[[return @User.Type a
]]
function()
  return
    --[unary expr start] User.Type
    @<usertype>
     --[suffixed expr start] any
      --[primary start] any
        a --global symbol ? 
      --[primary end]
     --[suffixed expr end]
    --[unary expr end]
end

--
--[[for i=1,10 do print(i+1) end return
]]
function()
--locals  i
  for
    i --local symbol integer 
  =
    1
   ,
    10
  do
     --[expression statement start]
      --[expression list start]
        --[suffixed expr start] any
         --[primary start] any
           print --global symbol ? 
         --[primary end]
         --[suffix list start]
           --[function call start] any
            (
              --[binary expr start] integer
               --[suffixed expr start] integer
                --[primary start] integer
                  i --local symbol integer 
                --[primary end]
               --[suffixed expr end]
              +
               1
              --[binary expr end]
            )
           --[function call end]
         --[suffix list end]
        --[suffixed expr end]
      --[expression list end]
     --[expression statement end]
  end
  return
end

--
--[[for i=1.0, 10.0 do print(i+4.2) end return
]]
function()
--locals  i
  for
    i --local symbol number 
  =
    1.0000000000000000
   ,
    10.0000000000000000
  do
     --[expression statement start]
      --[expression list start]
        --[suffixed expr start] any
         --[primary start] any
           print --global symbol ? 
         --[primary end]
         --[suffix list start]
           --[function call start] any
            (
              --[binary expr start] number
               --[suffixed expr start] number
                --[primary start] number
                  i --local symbol number 
                --[primary end]
               --[suffixed expr end]
              +
               4.2000000000000002
              --[binary expr end]
            )
           --[function call end]
         --[suffix list end]
        --[suffixed expr end]
      --[expression list end]
     --[expression statement end]
  end
  return
end

--
--[[return {1,2,3}
]]
function()
  return
    { --[table constructor start] table
      --[indexed assign start] integer
      --[value start]
       1
      --[value end]
      --[indexed assign end]
     ,
      --[indexed assign start] integer
      --[value start]
       2
      --[value end]
      --[indexed assign end]
     ,
      --[indexed assign start] integer
      --[value start]
       3
      --[value end]
      --[indexed assign end]
    } --[table constructor end]
end

--
--[[local a: integer return {1+a}
]]
function()
--locals  a
  local
  --[symbols]
    a --local symbol integer 
  return
    { --[table constructor start] table
      --[indexed assign start] integer
      --[value start]
       --[binary expr start] integer
        1
       +
        --[suffixed expr start] integer
         --[primary start] integer
           a --local symbol integer 
         --[primary end]
        --[suffixed expr end]
       --[binary expr end]
      --[value end]
      --[indexed assign end]
    } --[table constructor end]
end

--
--[[return {[1] = a}
]]
function()
  return
    { --[table constructor start] table
      --[indexed assign start] any
      --[index start]
       --[Y index start] any
        [
         1
        ]
       --[Y index end]
      --[index end]
      --[value start]
       --[suffixed expr start] any
        --[primary start] any
          a --global symbol ? 
        --[primary end]
       --[suffixed expr end]
      --[value end]
      --[indexed assign end]
    } --[table constructor end]
end

--
