From cca0eb2117a98695a0280adbc1693b3c92cfab7a Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Wed, 6 Oct 2021 23:25:41 +0200 Subject: Implemented the interpreter --- src/interpreter.nim | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/interpreter.nim (limited to 'src/interpreter.nim') diff --git a/src/interpreter.nim b/src/interpreter.nim new file mode 100644 index 0000000..56313b5 --- /dev/null +++ b/src/interpreter.nim @@ -0,0 +1,33 @@ +import field +import pointer + +type + Interpreter = object + f: ref Field + p: ref Pointer + argv: seq[string] + +func NewInterpreter*(f: ref Field, p: ref Pointer): ref Interpreter = + new(result) + result.f = f + result.p = p + +proc Step*(i: var Interpreter): ref int = + var prev: ref Pointer + var p = i.p + while p != nil: + let (d, v) = p[].Exec(i.f[]) + if v != nil: + return v + if d: + if prev == nil: + i.p = p.next + else: + prev.next = p.next + p = p.next + +proc Run*(i: var Interpreter): int = + while i.p != nil: + let v = i.Step() + if v != nil: + return v[] -- cgit v1.2.3