add line-running and noop cmd
This commit is contained in:
parent
cb6008c385
commit
627b49b418
3 changed files with 48 additions and 3 deletions
|
@ -1 +1 @@
|
||||||
noop
|
noop;
|
||||||
|
|
28
scritcher/executer.py
Normal file
28
scritcher/executer.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import shlex
|
||||||
|
|
||||||
|
|
||||||
|
class InterpreterError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class Interpreter:
|
||||||
|
"""Interpreter for scritcher instructions/statements."""
|
||||||
|
def __init__(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _cmd_noop(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def run(self, line: str):
|
||||||
|
"""Run a single line."""
|
||||||
|
print(f'running {line!r}')
|
||||||
|
|
||||||
|
args = shlex.split(line)
|
||||||
|
command = args[0]
|
||||||
|
|
||||||
|
try:
|
||||||
|
method = getattr(self, f'_cmd_{command}')
|
||||||
|
except AttributeError:
|
||||||
|
raise InterpreterError(f'Command {command!r} not found')
|
||||||
|
|
||||||
|
method(*args[1:])
|
|
@ -1,11 +1,28 @@
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
|
from .executer import Interpreter, InterpreterError
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
try:
|
try:
|
||||||
scri_path = Path(sys.argv[1]).resolve()
|
scri_path = Path(sys.argv[1]).resolve()
|
||||||
except IndexError:
|
except IndexError:
|
||||||
print(f'usage: {sys.argv[0]} path/to/file.scri')
|
print(f'usage: {sys.argv[0]} path/to/file.scri')
|
||||||
return
|
return
|
||||||
print('path', scri_path)
|
|
||||||
#run(scri_path)
|
full_text = scri_path.read_text()
|
||||||
|
full_text = full_text.replace('\n', '')
|
||||||
|
stmts = full_text.split(';')
|
||||||
|
|
||||||
|
interp = Interpreter()
|
||||||
|
|
||||||
|
try:
|
||||||
|
for stmt in stmts:
|
||||||
|
if not stmt:
|
||||||
|
continue
|
||||||
|
|
||||||
|
interp.run(stmt)
|
||||||
|
except InterpreterError as err:
|
||||||
|
print(f'Interpreter error. {err.args[0]!r}')
|
||||||
|
|
||||||
|
print('OK')
|
||||||
|
|
Loading…
Reference in a new issue