Create import statement evaluator and update standard library
This commit is contained in:
@@ -5,7 +5,5 @@ from smnp.program.interpreter import Interpreter
|
||||
|
||||
def loadStandardLibrary():
|
||||
mainSource = resource_string('smnp.library.code', 'main.mus').decode("utf-8")
|
||||
boolSource = resource_string('smnp.library.code', 'bool.mus').decode("utf-8")
|
||||
env = Interpreter.interpretString(mainSource)
|
||||
return Interpreter.interpretString(boolSource, baseEnvironment=env)
|
||||
|
||||
return env
|
||||
|
||||
@@ -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:
|
||||
#stdLibraryEnv = loadStandardLibrary()
|
||||
Interpreter.interpretFile(sys.argv[1], printTokens=False, printAst=True, execute=True, baseEnvironment=None)
|
||||
stdLibraryEnv = loadStandardLibrary()
|
||||
Interpreter.interpretFile(sys.argv[1], printTokens=False, printAst=True, execute=True, baseEnvironment=stdLibraryEnv)
|
||||
#draft()
|
||||
#tokens = tokenize(['function a(b...) { x+y}'])
|
||||
#FunctionDefinitionParser(tokens).node.print()
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from smnp.ast.node.block import Block
|
||||
from smnp.ast.node.condition import IfElse
|
||||
from smnp.ast.node.imports import Import
|
||||
from smnp.ast.node.program import Program
|
||||
from smnp.error.runtime import RuntimeException
|
||||
from smnp.type.model import Type
|
||||
@@ -69,10 +70,12 @@ def evaluate(node, environment):
|
||||
from smnp.runtime.evaluators.expression import expressionEvaluator
|
||||
from smnp.runtime.evaluators.condition import IfElseStatementEvaluator
|
||||
from smnp.runtime.evaluators.block import BlockEvaluator
|
||||
from smnp.runtime.evaluators.imports import ImportEvaluator
|
||||
result = Evaluator.oneOf(
|
||||
Evaluator.forNodes(ProgramEvaluator.evaluate, Program),
|
||||
Evaluator.forNodes(IfElseStatementEvaluator.evaluate, IfElse),
|
||||
Evaluator.forNodes(BlockEvaluator.evaluate, Block),
|
||||
Evaluator.forNodes(ImportEvaluator.evaluate, Import),
|
||||
#Evaluator.forNodes(ImportEvaluator.evaluate, ImportNode),
|
||||
#Evaluator.forNodes(FunctionDefinitionEvaluator.evaluate, FunctionDefinitionNode),
|
||||
#Evaluator.forNodes(ExtendEvaluator.evaluate, ExtendNode),
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
from smnp.ast.node.none import NoneNode
|
||||
from smnp.program.interpreter import Interpreter
|
||||
from smnp.runtime.evaluator import Evaluator
|
||||
|
||||
@@ -7,13 +6,6 @@ class ImportEvaluator(Evaluator):
|
||||
|
||||
@classmethod
|
||||
def evaluator(cls, node, environment):
|
||||
if type(node.type) == NoneNode:
|
||||
cls._evaluateCodeImport(node, environment)
|
||||
else:
|
||||
raise RuntimeError("Importing types is not implemented yet")
|
||||
|
||||
@classmethod
|
||||
def _evaluateCodeImport(cls, node, environment):
|
||||
source = node.source
|
||||
newEnvironment = Interpreter.interpretFile(source.value)
|
||||
environment.extend(newEnvironment)
|
||||
Reference in New Issue
Block a user