
fn main {

    while true {
        code = ""

        while string.trim(code) == "" {
            code = input('CALC >> ')
        }

        if code == "exit" {
            exit()
        }

        c: const = tokenizeMathString(code)

        array.each(
            c,
            lambda token {
                print(token)
            }
        )

    }

}

add: const = array.add;

fn tokenizeMathString mathstr {
    # returns abstract syntax tree of mathstr

    tokens = []

    tokens = add(tokens, {
        type: "start",
        value: undef
    })

    array.each(


        string.split(mathstr,''),

        lambda char i {

        print(tokens)
            if char == " " {} else if char == "+" {
                tokens = add(tokens, {
                    type: "operator",
                    value: "+"
                })
            }

            else if char == "-" {
                tokens = add(tokens, {
                    type: "operator",
                    value: "-"
                })
            }

            else if char == "*" {
                tokens = add(tokens, {
                    type: "operator",
                    value: "*"
                })
            }

            else if char == "/" {
                tokens = add(tokens, {
                    type: "operator",
                    value: "/"
                })
            }

            else if char == "(" {
                tokens = add(tokens, {
                    type: "start",
                    value: undef
                })
            }

            else if char == ")" {
                tokens = add(tokens, {
                    type: "end",
                    value: undef
                })
            }

            else if char == "0" {
                tokens = add(tokens, {
                    type: "number",
                    value: 0
                })
            }

            else if char == "1" {
                tokens = add(tokens, {
                    type: "number",
                    value: 1
                })
            }

            else if char == "2" {
                tokens = add(tokens, {
                    type: "number",
                    value: 2
                })
            }

            else if char == "3" {
                tokens = add(tokens, {
                    type: "number",
                    value: 3
                })
            }

            else if char == "4" {
                tokens = add(tokens, {
                    type: "number",
                    value: 4
                })
            }

            else if char == "5" {
                tokens = add(tokens, {
                    type: "number",
                    value: 5
                })
            }

            else if char == "6" {
                tokens = add(tokens, {
                    type: "number",
                    value: 6
                })
            }

            else if char == "7" {
                tokens = add(tokens, {
                    type: "number",
                    value: 7
                })
            }

            else if char == "8" {
                tokens = add(tokens, {
                    type: "number",
                    value: 8
                })
            }

            else if char == "9" {
                tokens = add(tokens, {
                    type: "number",
                    value: 9
                })
            }

            else {
                print("Invalid character: " + char)
                exit()
            }
        }
    )
}

