diff --git a/gen/midas.py b/gen/midas.py index 5405b6c..42caf4f 100644 --- a/gen/midas.py +++ b/gen/midas.py @@ -48,12 +48,6 @@ class ExtendStmt: members: list[MemberStmt] -class OpStmt: - name: Token - operand: Type - result: Type - - class PredicateStmt: name: Token subject: Token diff --git a/midas/ast/midas.py b/midas/ast/midas.py index c35e856..e71aff9 100644 --- a/midas/ast/midas.py +++ b/midas/ast/midas.py @@ -49,9 +49,6 @@ class Stmt(ABC): @abstractmethod def visit_extend_stmt(self, stmt: ExtendStmt) -> T: ... - @abstractmethod - def visit_op_stmt(self, stmt: OpStmt) -> T: ... - @abstractmethod def visit_predicate_stmt(self, stmt: PredicateStmt) -> T: ... @@ -86,16 +83,6 @@ class ExtendStmt(Stmt): return visitor.visit_extend_stmt(self) -@dataclass(frozen=True) -class OpStmt(Stmt): - name: Token - operand: Type - result: Type - - def accept(self, visitor: Stmt.Visitor[T]) -> T: - return visitor.visit_op_stmt(self) - - @dataclass(frozen=True) class PredicateStmt(Stmt): name: Token diff --git a/midas/ast/printer.py b/midas/ast/printer.py index d094d42..2124778 100644 --- a/midas/ast/printer.py +++ b/midas/ast/printer.py @@ -146,19 +146,6 @@ class MidasAstPrinter( self._mark_last() member.accept(self) - def visit_op_stmt(self, stmt: m.OpStmt) -> None: - self._write_line("OpStmt") - with self._child_level(): - self._write_line(f'name: "{stmt.name.lexeme}"') - - self._write_line("operand") - with self._child_level(single=True): - stmt.operand.accept(self) - - self._write_line("result", last=True) - with self._child_level(single=True): - stmt.result.accept(self) - def visit_predicate_stmt(self, stmt: m.PredicateStmt): self._write_line("PredicateStmt") with self._child_level(): @@ -378,11 +365,6 @@ class MidasPrinter(m.Expr.Visitor[str], m.Stmt.Visitor[str], m.Type.Visitor[str] res += self.indented("}") return res - def visit_op_stmt(self, stmt: m.OpStmt): - operand: str = stmt.operand.accept(self) - result: str = stmt.result.accept(self) - return self.indented(f"op {stmt.name.lexeme}({operand}) -> {result}\n") - def visit_predicate_stmt(self, stmt: m.PredicateStmt): name: str = stmt.name.lexeme subject: str = stmt.subject.lexeme diff --git a/midas/checker/midas.py b/midas/checker/midas.py index e27ca97..f54d6ab 100644 --- a/midas/checker/midas.py +++ b/midas/checker/midas.py @@ -105,8 +105,6 @@ class MidasTyper(m.Stmt.Visitor[None], m.Expr.Visitor[None], m.Type.Visitor[Type member.kind == m.MemberKind.METHOD, ) - def visit_op_stmt(self, stmt: m.OpStmt) -> None: ... - def visit_predicate_stmt(self, stmt: m.PredicateStmt) -> None: ... def visit_logical_expr(self, expr: m.LogicalExpr) -> None: ... diff --git a/midas/cli/highlighter.py b/midas/cli/highlighter.py index af81890..00c8dcf 100644 --- a/midas/cli/highlighter.py +++ b/midas/cli/highlighter.py @@ -241,12 +241,6 @@ class MidasHighlighter( for member in stmt.members: member.accept(self) - def visit_op_stmt(self, stmt: m.OpStmt) -> None: - self.wrap(stmt, "op") - self.wrap(LocatableToken(stmt.name), "op-name") - stmt.operand.accept(self) - stmt.result.accept(self) - def visit_predicate_stmt(self, stmt: m.PredicateStmt) -> None: self.wrap(stmt, "predicate") self.wrap(LocatableToken(stmt.name), "predicate-name") @@ -302,7 +296,7 @@ class MidasHighlighter( def visit_function_type(self, type: m.FunctionType) -> None: self.wrap(type, "function") - for arg in type.pos_args + type.kw_args: + for arg in type.pos_args + type.args + type.kw_args: arg.type.accept(self) type.returns.accept(self) diff --git a/midas/lexer/token.py b/midas/lexer/token.py index 95e0c18..f0c08a1 100644 --- a/midas/lexer/token.py +++ b/midas/lexer/token.py @@ -46,7 +46,6 @@ class TokenType(Enum): # Keywords TYPE = auto() - OP = auto() PREDICATE = auto() EXTEND = auto() WHERE = auto() @@ -63,7 +62,6 @@ class TokenType(Enum): KEYWORDS: dict[str, TokenType] = { "type": TokenType.TYPE, - "op": TokenType.OP, "predicate": TokenType.PREDICATE, "extend": TokenType.EXTEND, "where": TokenType.WHERE, diff --git a/midas/parser/midas.py b/midas/parser/midas.py index 2fc46cf..33069f3 100644 --- a/midas/parser/midas.py +++ b/midas/parser/midas.py @@ -17,7 +17,6 @@ from midas.ast.midas import ( MemberKind, MemberStmt, NamedType, - OpStmt, PredicateStmt, Stmt, Type, @@ -37,9 +36,10 @@ class MidasParser(Parser): SYNC_BOUNDARY: set[TokenType] = { TokenType.TYPE, - TokenType.OP, TokenType.EXTEND, TokenType.PREDICATE, + TokenType.PROP, + TokenType.FUNC, } def parse(self) -> list[Stmt]: @@ -444,31 +444,6 @@ class MidasParser(Parser): members=members, ) - def op_declaration(self) -> OpStmt: - """Parse an operation definition - - An operation is written `op name(Type) -> Type` - - Returns: - OpStmt: the parsed operation statement - """ - keyword: Token = self.consume(TokenType.OP, "Expected 'op' keyword") - - name: Token = self.consume(TokenType.IDENTIFIER, "Expected operation name") - self.consume(TokenType.LEFT_PAREN, "Expected '(' before operand type") - operand: Type = self.type_expr() - self.consume(TokenType.RIGHT_PAREN, "Expected ')' after operand type") - - self.consume(TokenType.ARROW, "Expected '->' before result type") - result: Type = self.type_expr() - - return OpStmt( - location=keyword.location_to(self.previous()), - name=name, - operand=operand, - result=result, - ) - def predicate_declaration(self) -> PredicateStmt: """Parse a predicate declaration diff --git a/tests/serializer/midas.py b/tests/serializer/midas.py index f1e55da..8bffdb3 100644 --- a/tests/serializer/midas.py +++ b/tests/serializer/midas.py @@ -15,7 +15,6 @@ from midas.ast.midas import ( LogicalExpr, MemberStmt, NamedType, - OpStmt, PredicateStmt, Stmt, Type, @@ -75,14 +74,6 @@ class MidasAstJsonSerializer( "members": self._serialize_list(stmt.members), } - def visit_op_stmt(self, stmt: OpStmt) -> dict: - return { - "_type": "OpStmt", - "name": stmt.name.lexeme, - "operand": stmt.operand.accept(self), - "result": stmt.result.accept(self), - } - def visit_predicate_stmt(self, stmt: PredicateStmt) -> dict: return { "_type": "PredicateStmt",