diff --git a/examples/hello.scri b/examples/hello.scri new file mode 100644 index 0000000..3583c5a --- /dev/null +++ b/examples/hello.scri @@ -0,0 +1 @@ +noop; diff --git a/scritcher/executer.py b/scritcher/executer.py new file mode 100644 index 0000000..b1bd63b --- /dev/null +++ b/scritcher/executer.py @@ -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:]) diff --git a/scritcher/main.py b/scritcher/main.py index 654e2c7..96d1b6f 100644 --- a/scritcher/main.py +++ b/scritcher/main.py @@ -1,2 +1,28 @@ +import sys +from pathlib import Path + +from .executer import Interpreter, InterpreterError + def main(): - print('hello world') + try: + scri_path = Path(sys.argv[1]).resolve() + except IndexError: + print(f'usage: {sys.argv[0]} path/to/file.scri') + return + + 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') diff --git a/setup.py b/setup.py index 69cb198..852efa9 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,9 @@ setup( name='scritcher', version='0.1', py_modules=['scritcher'], - install_requires=[], + install_requires=[ + 'Pillow==6.0.0', + ], entry_points=''' [console_scripts] scritcher=scritcher:main