Own-Programming-Language-Tu.../examples/functions/calculator.own

46 lines
919 B
Scala

// Simple parser example
use std, types
operations = {
"+" : def(a,b) = a+b,
"-" : def(a,b) = a-b,
"*" : def(a,b) = a*b,
"/" : def(a,b) = a/b,
"%" : def(a,b) = a%b,
">" : def(a,b) = a>b,
"<" : def(a,b) = a<b
}
def calculate(expression) {
pos = 0
len = length(expression)
def isDigit(c) = 48 <= c && c <= 57
def parseNumber() {
buffer = ""
while (pos < len && isDigit(expression.charAt(pos))) {
buffer += toChar(expression.charAt(pos))
pos++
}
return number(buffer)
}
def parseOperation() {
while (pos < len && !arrayKeyExists(toChar(expression.charAt(pos)), operations)) {
pos++
}
return operations[toChar(expression.charAt(pos++))]
}
num1 = parseNumber()
op = parseOperation()
num2 = parseNumber()
return op(num1, num2)
}
println calculate("2+2")
println calculate("400*16")
println calculate("400/160")
println calculate("3>4")