mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
47 lines
926 B
Scala
47 lines
926 B
Scala
// Simple parser example
|
|
use "std"
|
|
use "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")
|