Skip to content

Commit

Permalink
#19 [syntax] hided s2p visitor, extracted syntax to program convert api
Browse files Browse the repository at this point in the history
  • Loading branch information
vityaman committed Feb 9, 2024
1 parent f2a1f0a commit 1e370c1
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 27 deletions.
4 changes: 2 additions & 2 deletions sleepy/main.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from sleepy.asmik import asmik_emit
from sleepy.interpreter import AsmikInterpreter
from sleepy.syntax import LarkParser, Syntax2Program
from sleepy.syntax import LarkParser, to_program
from sleepy.tafka import TafkaUnit


Expand All @@ -17,7 +17,7 @@ def main() -> None:

parser = LarkParser()
syntax = parser.parse_program(source)
program = Syntax2Program.converted(syntax)
program = to_program(syntax)
tafka = TafkaUnit.emitted_from(program)
asmik = asmik_emit(tafka)

Expand Down
2 changes: 1 addition & 1 deletion sleepy/syntax/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from .exception import ParsingError
from .lark import LarkParser
from .parser import SleepyParser
from .s2p import Syntax2Program
from .s2p import to_program
from .tree import (
Application,
Args,
Expand Down
33 changes: 13 additions & 20 deletions sleepy/syntax/s2p.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,8 @@
from .visitor import Visitor


class Syntax2Program(Visitor[ProgramNode]):
def __init__(
self,
namespace: Namespace,
bindings: Bindings,
) -> None:
class S2PVisitor(Visitor[ProgramNode]):
def __init__(self, namespace: Namespace, bindings: Bindings) -> None:
self.namespace = namespace
self.bindings = bindings

Expand Down Expand Up @@ -124,19 +120,16 @@ def visit_definition(
return Definition(symbol, expression)

@override
def visit_expression(
self,
expression: ExpressionAST,
) -> Expression:
def visit_expression(self, expression: ExpressionAST) -> Expression:
return cast(Expression, super().visit_expression(expression))

@classmethod
def converted(cls, tree: ProgramAST) -> ProgramUnit:
builtin = BuiltinLayer()
s2p = Syntax2Program(builtin.namespace, builtin.bindings)
program = s2p.visit_program(tree)
return ProgramUnit(
program=program,
bindings=s2p.bindings,
root=builtin.namespace,
)

def to_program(tree: ProgramAST) -> ProgramUnit:
builtin = BuiltinLayer()
s2p = S2PVisitor(builtin.namespace, builtin.bindings)
program = s2p.visit_program(tree)
return ProgramUnit(
program=program,
bindings=s2p.bindings,
root=builtin.namespace,
)
4 changes: 2 additions & 2 deletions test/asmik/evaluate.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@

from sleepy.asmik import asmik_emit
from sleepy.interpreter import AsmikInterpreter
from sleepy.syntax import Syntax2Program
from sleepy.syntax import to_program
from sleepy.tafka import TafkaUnit


def evaluate(source: str) -> str:
syntax = parser.parse_program(source)
program = Syntax2Program.converted(syntax)
program = to_program(syntax)
tafka = TafkaUnit.emitted_from(program)
asmik = asmik_emit(tafka)

Expand Down
4 changes: 2 additions & 2 deletions test/program/parse.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from test.common import parser

from sleepy.program import ProgramUnit
from sleepy.syntax import Syntax2Program
from sleepy.syntax import to_program


def parse(source: str) -> ProgramUnit:
return Syntax2Program.converted(parser.parse_program(source))
return to_program(parser.parse_program(source))

0 comments on commit 1e370c1

Please sign in to comment.