Mercurial > repos > icfp2013
changeset 22:a4837071b73d
some attempts at parsing an eval response
author | William Morgan <bill@mrgn.org> |
---|---|
date | Sat, 10 Aug 2013 03:31:50 -0700 |
parents | a4ac42c69285 |
children | fcd7ae66a9ee |
files | src/requests.tp |
diffstat | 1 files changed, 112 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/requests.tp Fri Aug 09 15:53:53 2013 -0700 +++ b/src/requests.tp Sat Aug 10 03:31:50 2013 -0700 @@ -37,8 +37,120 @@ } } + + + + + + expect:in <- :target input { + input find: target else: { + print: "expected " . target . "!\n" + -1 + //exit, it's all fucked now + } + } + + quotedVal <- :str { + str find: "\"" else: { + "expected + } + } + + jsonVal:in <- :target input { + idx <- expect: target in: input + nextQuoteIdx <- idx + + quotedVal: idx + } + + evalResponse <- :str { + str find: "status" else: {print: missing} + statIdx <- expect: "status" in: str + status <- requireK + + #{ + status <- + outputs <- parseArray(input) + message <- + } + } + + + println: str { + print: str . "\n" + } + + readObject <- :str { + expect "{" + readObjectContents: + expect "}" + } + + readObject <- :str { + innerStr <- readEnclosed: "{" "}" + elems <- split: "," + } + + evalResponse <- :str { + status <- readValForKey: "status" str + if status = "error" { + + } else { + if status = "ok" { + #{ + readEvalOutputs: + } + } + } + + } + + expect:in:else <- :target src doElse { + src find: target else: { + print: "parse error: expected " . target . "!\n" + doElse: + } + } + + getStrForKey:from:else <- :key :src :doElse { + idx <- expect: "\"" in: src else: doElse + idx + (key length): + } + + getEval:else <- :str :fail { + statusRest <- getStrForKey: "status" from: str else: fail + if (statusRest value) = 0 { + outputsRest <- getOutputs: (statusRest rest) else: fail + #{ + value <- #{ + status <- statusRest.value + outputs <- outputsRest.value + } + rest <- outputsRest.rest + } + } else { + print: "Status was error, message: " . message + #{ + message <- getStrForKey: "message" from: (statusRest rest) else: fail + value <- #{ + status <- statusRest.value + message <- outputsRest.value + } + rest <- outputsRest.rest + } + } + } + + + main <- { print: ((evalRequest: "someId" #[1 2i64 3i64]) string) . "\n" print: ((guessRequest: "someId" "someProg") string) . "\n" + + exampleEvalResponse <- "{\"status\":\"ok\",\"outputs\":[\"0x0000000000000002\",\"0x01DFFFFFFFFFFFFE\"]}" + resp <- getEval: exampleEvalResponse else: { + println: "failed to parse response." + } + println: ((resp value) status) } + }