diff --git a/nimjapl/interpreter.nim b/nim/interpreter.nim similarity index 100% rename from nimjapl/interpreter.nim rename to nim/interpreter.nim diff --git a/nimjapl/lexer.nim b/nim/lexer.nim similarity index 99% rename from nimjapl/lexer.nim rename to nim/lexer.nim index 295039f..1db7513 100644 --- a/nimjapl/lexer.nim +++ b/nim/lexer.nim @@ -186,7 +186,7 @@ proc scanToken(self: var Lexer) = raise newException(ParseError, &"Unexpected character '{single}' at {self.line}") -proc lex(self: var Lexer): seq[Token] = +proc lex*(self: var Lexer): seq[Token] = while not self.done(): self.start = self.current self.scanToken() diff --git a/nimjapl/meta/classtype.nim b/nim/meta/classtype.nim similarity index 100% rename from nimjapl/meta/classtype.nim rename to nim/meta/classtype.nim diff --git a/nimjapl/meta/exceptions.nim b/nim/meta/exceptions.nim similarity index 100% rename from nimjapl/meta/exceptions.nim rename to nim/meta/exceptions.nim diff --git a/nimjapl/meta/expression.nim b/nim/meta/expression.nim similarity index 100% rename from nimjapl/meta/expression.nim rename to nim/meta/expression.nim diff --git a/nimjapl/meta/functiontype.nim b/nim/meta/functiontype.nim similarity index 100% rename from nimjapl/meta/functiontype.nim rename to nim/meta/functiontype.nim diff --git a/nimjapl/meta/statement.nim b/nim/meta/statement.nim similarity index 100% rename from nimjapl/meta/statement.nim rename to nim/meta/statement.nim diff --git a/nimjapl/meta/tokenobject.nim b/nim/meta/tokenobject.nim similarity index 100% rename from nimjapl/meta/tokenobject.nim rename to nim/meta/tokenobject.nim diff --git a/nimjapl/meta/tokentype.nim b/nim/meta/tokentype.nim similarity index 100% rename from nimjapl/meta/tokentype.nim rename to nim/meta/tokentype.nim diff --git a/nimjapl/meta/valueobject.nim b/nim/meta/valueobject.nim similarity index 100% rename from nimjapl/meta/valueobject.nim rename to nim/meta/valueobject.nim diff --git a/nimjapl/parser.nim b/nim/parser.nim similarity index 100% rename from nimjapl/parser.nim rename to nim/parser.nim diff --git a/nimjapl/types/callable.nim b/nim/types/callable.nim similarity index 100% rename from nimjapl/types/callable.nim rename to nim/types/callable.nim diff --git a/nimjapl/types/class.nim b/nim/types/class.nim similarity index 100% rename from nimjapl/types/class.nim rename to nim/types/class.nim diff --git a/nimjapl/types/function.nim b/nim/types/function.nim similarity index 100% rename from nimjapl/types/function.nim rename to nim/types/function.nim diff --git a/nimjapl/types/instance.nim b/nim/types/instance.nim similarity index 100% rename from nimjapl/types/instance.nim rename to nim/types/instance.nim diff --git a/JAPL/__init__.py b/python/JAPL/__init__.py similarity index 100% rename from JAPL/__init__.py rename to python/JAPL/__init__.py diff --git a/JAPL/interpreter.py b/python/JAPL/interpreter.py similarity index 100% rename from JAPL/interpreter.py rename to python/JAPL/interpreter.py diff --git a/JAPL/lexer.py b/python/JAPL/lexer.py similarity index 100% rename from JAPL/lexer.py rename to python/JAPL/lexer.py diff --git a/JAPL/meta/__init__.py b/python/JAPL/meta/__init__.py similarity index 100% rename from JAPL/meta/__init__.py rename to python/JAPL/meta/__init__.py diff --git a/JAPL/meta/classtype.py b/python/JAPL/meta/classtype.py similarity index 100% rename from JAPL/meta/classtype.py rename to python/JAPL/meta/classtype.py diff --git a/JAPL/meta/environment.py b/python/JAPL/meta/environment.py similarity index 98% rename from JAPL/meta/environment.py rename to python/JAPL/meta/environment.py index e88fd3d..b6be5d1 100644 --- a/JAPL/meta/environment.py +++ b/python/JAPL/meta/environment.py @@ -38,7 +38,7 @@ class Environment(object): """Finds the scope specified by distance""" env = self - for i in range(0, distance): + for _ in range(distance): env = env.enclosing return env diff --git a/JAPL/meta/exceptions.py b/python/JAPL/meta/exceptions.py similarity index 100% rename from JAPL/meta/exceptions.py rename to python/JAPL/meta/exceptions.py diff --git a/JAPL/meta/expression.py b/python/JAPL/meta/expression.py similarity index 100% rename from JAPL/meta/expression.py rename to python/JAPL/meta/expression.py diff --git a/JAPL/meta/functiontype.py b/python/JAPL/meta/functiontype.py similarity index 100% rename from JAPL/meta/functiontype.py rename to python/JAPL/meta/functiontype.py diff --git a/JAPL/meta/looptype.py b/python/JAPL/meta/looptype.py similarity index 100% rename from JAPL/meta/looptype.py rename to python/JAPL/meta/looptype.py diff --git a/JAPL/meta/statement.py b/python/JAPL/meta/statement.py similarity index 100% rename from JAPL/meta/statement.py rename to python/JAPL/meta/statement.py diff --git a/JAPL/meta/tokenobject.py b/python/JAPL/meta/tokenobject.py similarity index 99% rename from JAPL/meta/tokenobject.py rename to python/JAPL/meta/tokenobject.py index 8c8c232..5607348 100644 --- a/JAPL/meta/tokenobject.py +++ b/python/JAPL/meta/tokenobject.py @@ -1,7 +1,6 @@ from dataclasses import dataclass from .tokentype import TokenType - @dataclass class Token(object): """The representation of a JAPL token""" diff --git a/JAPL/meta/tokentype.py b/python/JAPL/meta/tokentype.py similarity index 97% rename from JAPL/meta/tokentype.py rename to python/JAPL/meta/tokentype.py index d4561bc..0036010 100644 --- a/JAPL/meta/tokentype.py +++ b/python/JAPL/meta/tokentype.py @@ -1,6 +1,5 @@ from enum import Enum, auto - class TokenType(Enum): """ An enumeration for all JAPL types @@ -44,7 +43,6 @@ class TokenType(Enum): IF = auto() NIL = auto() OR = auto() - PRINT = auto() RETURN = auto() SUPER = auto() THIS = auto() diff --git a/JAPL/parser.py b/python/JAPL/parser.py similarity index 100% rename from JAPL/parser.py rename to python/JAPL/parser.py diff --git a/JAPL/resolver.py b/python/JAPL/resolver.py similarity index 98% rename from JAPL/resolver.py rename to python/JAPL/resolver.py index 50004de..478db44 100644 --- a/JAPL/resolver.py +++ b/python/JAPL/resolver.py @@ -64,7 +64,7 @@ class Resolver(Expression.Visitor, Statement.Visitor): Resolves an expression """ - expression.accept(self) + return expression.accept(self) @resolve.register def resolve_statements(self, stmt: list): @@ -190,11 +190,6 @@ class Resolver(Expression.Visitor, Statement.Visitor): if stmt.else_branch: self.resolve(stmt.else_branch) - def visit_print(self, stmt): - """Visits a print statement node""" - - self.resolve(stmt.expression) - def visit_return(self, stmt): """Visits a return statement node""" diff --git a/JAPL/types/__init__.py b/python/JAPL/types/__init__.py similarity index 100% rename from JAPL/types/__init__.py rename to python/JAPL/types/__init__.py diff --git a/JAPL/types/callable.py b/python/JAPL/types/callable.py similarity index 100% rename from JAPL/types/callable.py rename to python/JAPL/types/callable.py diff --git a/JAPL/types/instance.py b/python/JAPL/types/instance.py similarity index 100% rename from JAPL/types/instance.py rename to python/JAPL/types/instance.py diff --git a/JAPL/types/japlclass.py b/python/JAPL/types/japlclass.py similarity index 100% rename from JAPL/types/japlclass.py rename to python/JAPL/types/japlclass.py diff --git a/JAPL/types/native.py b/python/JAPL/types/native.py similarity index 100% rename from JAPL/types/native.py rename to python/JAPL/types/native.py diff --git a/JAPL/wrapper.py b/python/JAPL/wrapper.py similarity index 58% rename from JAPL/wrapper.py rename to python/JAPL/wrapper.py index 71bc524..6b8dc50 100644 --- a/JAPL/wrapper.py +++ b/python/JAPL/wrapper.py @@ -47,31 +47,23 @@ class JAPL(object): except (EOFError, KeyboardInterrupt): print() return - else: - if not source: - continue - lexer = Lexer(source) - try: - tokens = lexer.lex() - except ParseError as err: - print(f"\nAn exception occurred, details below\n\nParseError: {err.args[0]}") + if not source: + continue + lexer = Lexer(source) + try: + tokens = lexer.lex() + ast = Parser(tokens).parse() + self.resolver.resolve(ast) + result = self.interpreter.interpret(ast) + except ParseError as err: + if len(err.args) == 2: + token, message = err.args + print(f"An exception occurred at line {token.line} at '{token.lexeme}': {message}") else: - try: - ast = Parser(tokens).parse() - except ParseError as err: - token, message = err.args - print(f"An exception occurred at line {token.line} at '{token.lexeme}': {message}") - else: - try: - self.resolver.resolve(ast) - result = self.interpreter.interpret(ast) - except JAPLError as error: - if len(error.args) == 2: - token, message = error.args - print( - f"An exception occurred at line {token.line}, file 'stdin' at '{token.lexeme}': {message}") - else: - print(f"An exception occurred, details below\n\n{type(error).__name__}: {error}") - else: - if result is not None: - print(repr(result)) + print(f"\nAn exception occurred, details below\n\nParseError: {err.args[0]}") + except JAPLError as error: + if len(error.args) == 2: + token, message = error.args + print(f"An exception occurred at line {token.line}, file 'stdin' at '{token.lexeme}': {message}") + else: + print(f"An exception occurred, details below\n\n{type(error).__name__}: {error}") diff --git a/japl.py b/python/japl.py similarity index 100% rename from japl.py rename to python/japl.py diff --git a/requirements.txt b/python/requirements.txt similarity index 100% rename from requirements.txt rename to python/requirements.txt diff --git a/setup.py b/python/setup.py similarity index 100% rename from setup.py rename to python/setup.py