if ch == "0" { acc = acc * 10 + 0 i = i + 1 continue }
if ch == "1" { acc = acc * 10 + 1 i = i + 1 continue }
if ch == "2" { acc = acc * 10 + 2 i = i + 1 continue }
if ch == "3" { acc = acc * 10 + 3 i = i + 1 continue }
if ch == "4" { acc = acc * 10 + 4 i = i + 1 continue }
if ch == "5" { acc = acc * 10 + 5 i = i + 1 continue }
if ch == "6" { acc = acc * 10 + 6 i = i + 1 continue }
if ch == "7" { acc = acc * 10 + 7 i = i + 1 continue }
if ch == "8" { acc = acc * 10 + 8 i = i + 1 continue }
if ch == "9" { acc = acc * 10 + 9 i = i + 1 continue }
break
}
return acc
}
main(args) {
local json = "{\"kind\":\"Program\",\"statements\":[{\"kind\":\"Print\",\"expression\":{\"kind\":\"Literal\",\"value\":{\"type\":\"int\",\"value\":42}}}]}"
// If args provided, use the first as JSON source (guard None)
if args {
if args.size() > 0 {
local s = args.get(0)
if s { json = s }
}
}
// Top-level fast paths for simple Print cases (Literal/FunctionCall/Compare/BinaryOp)
local kl = "\"lhs\":{\"kind\":\"Literal\",\"value\":{\"type\":\"int\",\"value\":"
local pl = json.indexOf(kl, oj)
if pl >= 0 {
local li = pl + kl.length()
local le = json.indexOf("}", li)
if le >= 0 {
local la = json.substring(li, le)
// rhs int
local kr = "\"rhs\":{\"kind\":\"Literal\",\"value\":{\"type\":\"int\",\"value\":"
local pr = json.indexOf(kr, le)
if pr >= 0 {
local ri = pr + kr.length()
local re = json.indexOf("}", ri)
if re >= 0 {
local rb = json.substring(ri, re)
// compute
local a = 0
local i = 0
loop (i < la.length()) { local ch = la.substring(i, i+1) if ch == "0" { a = a*10+0 i=i+1 continue } if ch == "1" { a=a*10+1 i=i+1 continue } if ch == "2" { a=a*10+2 i=i+1 continue } if ch == "3" { a=a*10+3 i=i+1 continue } if ch == "4" { a=a*10+4 i=i+1 continue } if ch == "5" { a=a*10+5 i=i+1 continue } if ch == "6" { a=a*10+6 i=i+1 continue } if ch == "7" { a=a*10+7 i=i+1 continue } if ch == "8" { a=a*10+8 i=i+1 continue } if ch == "9" { a=a*10+9 i=i+1 continue } break }
local b = 0
local j = 0
loop (j < rb.length()) { local ch2 = rb.substring(j, j+1) if ch2 == "0" { b = b*10+0 j=j+1 continue } if ch2 == "1" { b=b*10+1 j=j+1 continue } if ch2 == "2" { b=b*10+2 j=j+1 continue } if ch2 == "3" { b=b*10+3 j=j+1 continue } if ch2 == "4" { b=b*10+4 j=j+1 continue } if ch2 == "5" { b=b*10+5 j=j+1 continue } if ch2 == "6" { b=b*10+6 j=j+1 continue } if ch2 == "7" { b=b*10+7 j=j+1 continue } if ch2 == "8" { b=b*10+8 j=j+1 continue } if ch2 == "9" { b=b*10+9 j=j+1 continue } break }
local res = 0
if op == "<" { if a < b { res = 1 } }
if op == "==" { if a == b { res = 1 } }
if op == "<=" { if a <= b { res = 1 } }
if op == ">" { if a > b { res = 1 } }
if op == ">=" { if a >= b { res = 1 } }
if op == "!=" { if a != b { res = 1 } }
print(res)
return 0
}
}
}
}
}
}
}
// 5) BinaryOp(int+int) typed pattern twice and add(保険)
if json.indexOf("\"BinaryOp\"") >= 0 && json.indexOf("\"operator\":\"+\"") >= 0 {
local pat = "\"type\":\"int\",\"value\":"
local p1 = json.indexOf(pat)
if p1 >= 0 {
// parse first integer by taking until next closing brace
local i = p1 + pat.length()
local end1 = json.indexOf("}", i)
if end1 < 0 { end1 = i }
local a_str = json.substring(i, end1)
// convert a_str to int
local a = 0
local k = 0
loop (k < a_str.length()) {
local ch = a_str.substring(k, k+1)
if ch == "0" { a = a * 10 + 0 k = k + 1 continue }
if ch == "1" { a = a * 10 + 1 k = k + 1 continue }
if ch == "2" { a = a * 10 + 2 k = k + 1 continue }
if ch == "3" { a = a * 10 + 3 k = k + 1 continue }
if ch == "4" { a = a * 10 + 4 k = k + 1 continue }
if ch == "5" { a = a * 10 + 5 k = k + 1 continue }
if ch == "6" { a = a * 10 + 6 k = k + 1 continue }
if ch == "7" { a = a * 10 + 7 k = k + 1 continue }
if ch == "8" { a = a * 10 + 8 k = k + 1 continue }
if ch == "9" { a = a * 10 + 9 k = k + 1 continue }
break
}
// parse second integer
local p2 = json.lastIndexOf(pat)
if p2 >= 0 && p2 != p1 {
local j = p2 + pat.length()
local end2 = json.indexOf("}", j)
if end2 < 0 { end2 = j }
local b_str = json.substring(j, end2)
local b = 0
local m = 0
loop (m < b_str.length()) {
local ch2 = b_str.substring(m, m+1)
if ch2 == "0" { b = b * 10 + 0 m = m + 1 continue }
if ch2 == "1" { b = b * 10 + 1 m = m + 1 continue }
if ch2 == "2" { b = b * 10 + 2 m = m + 1 continue }
if ch2 == "3" { b = b * 10 + 3 m = m + 1 continue }
if ch2 == "4" { b = b * 10 + 4 m = m + 1 continue }
if ch2 == "5" { b = b * 10 + 5 m = m + 1 continue }
if ch2 == "6" { b = b * 10 + 6 m = m + 1 continue }
if ch2 == "7" { b = b * 10 + 7 m = m + 1 continue }
if ch2 == "8" { b = b * 10 + 8 m = m + 1 continue }
if ch2 == "9" { b = b * 10 + 9 m = m + 1 continue }
break
}
print(a + b)
return 0
}
}
}
// Fallback to full MiniVm runner
local vm = new MiniVm()
return vm.run(json)
}
}
// Top-level fallback entry for current runner
function main(args) {
local json = "{\"kind\":\"Program\",\"statements\":[{\"kind\":\"Print\",\"expression\":{\"kind\":\"Literal\",\"value\":{\"type\":\"int\",\"value\":42}}}]}"