diff --git a/smnp/environment/factory.py b/smnp/environment/factory.py index 8a08e96..ede8e66 100644 --- a/smnp/environment/factory.py +++ b/smnp/environment/factory.py @@ -1,12 +1,7 @@ from smnp.environment.environment import Environment from smnp.module import functions, methods -from smnp.type.model import Type def createEnvironment(): - variables = { - "bpm": Type.integer(120) - } - - return Environment([ variables ], functions, methods) + return Environment([{}], functions, methods) diff --git a/smnp/library/__init__.py b/smnp/library/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smnp/library/code/__init__.py b/smnp/library/code/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/smnp/library/loader.py b/smnp/library/loader.py new file mode 100644 index 0000000..37eac21 --- /dev/null +++ b/smnp/library/loader.py @@ -0,0 +1,9 @@ +from pkg_resources import resource_string + +from smnp.program.interpreter import Interpreter + + +def loadStandardLibrary(): + source = resource_string('smnp.library.code', 'main.mus').decode("utf-8") + return Interpreter.interpretString(source) + diff --git a/smnp/main.py b/smnp/main.py index 733f73c..71cb648 100644 --- a/smnp/main.py +++ b/smnp/main.py @@ -1,13 +1,14 @@ import sys from smnp.error.base import SmnpException +from smnp.library.loader import loadStandardLibrary from smnp.program.interpreter import Interpreter def main(): try: - - Interpreter.interpretFile(sys.argv[1], printAst=True) + stdLibraryEnv = loadStandardLibrary() + Interpreter.interpretFile(sys.argv[1], printAst=True, baseEnvironment=stdLibraryEnv) except SmnpException as e: print(e.message()) diff --git a/smnp/program/interpreter.py b/smnp/program/interpreter.py index 58f106b..fdd33e0 100644 --- a/smnp/program/interpreter.py +++ b/smnp/program/interpreter.py @@ -9,12 +9,20 @@ from smnp.token.tokenizer import tokenize class Interpreter: @staticmethod - def interpretFile(file, printTokens=False, printAst=False): + def interpretString(string, printTokens=False, printAst=False, baseEnvironment=None): + return Interpreter._interpret(string.splitlines(), printTokens, printAst, baseEnvironment) + + @staticmethod + def interpretFile(file, printTokens=False, printAst=False, baseEnvironment=None): + return Interpreter._interpret(readLines(file), printTokens, printAst, baseEnvironment) + + @staticmethod + def _interpret(lines, printTokens=False, printAst=False, baseEnvironment=None): environment = createEnvironment() + if baseEnvironment is not None: + environment.extend(baseEnvironment) try: - lines = readLines(file) - tokens = tokenize(lines) if printTokens: print(tokens)