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