From 6e0190a3780cfe5f8c2892e6c0252c8d75ccd2fe Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Fri, 22 May 2026 11:05:47 +0200 Subject: [PATCH] refactor: move source files in subdirectory --- gen/gen.py | 11 +++++++---- {core => midas}/ast/json_serializer.py | 2 +- {core => midas}/ast/midas.py | 2 +- {core => midas}/ast/printer.py | 4 ++-- {lexer => midas/lexer}/__init__.py | 0 {lexer => midas/lexer}/base.py | 4 ++-- {lexer => midas/lexer}/keyword.py | 2 +- {lexer => midas/lexer}/midas.py | 6 +++--- {lexer => midas/lexer}/position.py | 1 + {lexer => midas/lexer}/token.py | 2 +- {parser => midas/parser}/base.py | 4 ++-- {parser => midas/parser}/errors.py | 0 {parser => midas/parser}/midas.py | 8 ++++---- test.py | 8 ++++---- tester.py | 12 ++++++------ 15 files changed, 35 insertions(+), 31 deletions(-) rename {core => midas}/ast/json_serializer.py (99%) rename {core => midas}/ast/midas.py (99%) rename {core => midas}/ast/printer.py (99%) rename {lexer => midas/lexer}/__init__.py (100%) rename {lexer => midas/lexer}/base.py (98%) rename {lexer => midas/lexer}/keyword.py (87%) rename {lexer => midas/lexer}/midas.py (97%) rename {lexer => midas/lexer}/position.py (99%) rename {lexer => midas/lexer}/token.py (96%) rename {parser => midas/parser}/base.py (98%) rename {parser => midas/parser}/errors.py (100%) rename {parser => midas/parser}/midas.py (98%) diff --git a/gen/gen.py b/gen/gen.py index 47cb827..106dcc7 100644 --- a/gen/gen.py +++ b/gen/gen.py @@ -66,17 +66,18 @@ class {cls}({base}): return visitor.visit_{func_name}(self) """ + def snake_case(text: str) -> str: return re.sub(r"[A-Z]", lambda c: "_" + c.group().lower(), text).lower().strip("_") + def make_visitor_method(cls: str, param: str): method: str = VISITOR_METHOD_TEMPLATE.format( - func_name=snake_case(cls), - param=param, - cls=cls + func_name=snake_case(cls), param=param, cls=cls ) return method.strip("\n") + def make_class(name: str, cls: str, base: str): body: str = cls.split("\n", 1)[1] func_name: str = snake_case(name) @@ -88,6 +89,7 @@ def make_class(name: str, cls: str, base: str): ) return cls_def.strip("\n") + def generate(src: str): classes: list[str] = src.split("\n\n") stmt_visitor_methods: list[str] = [] @@ -114,10 +116,11 @@ def generate(src: str): expressions="\n\n\n".join(expressions), ) + def main(): root: Path = Path(__file__).parent.parent in_path: Path = root / "gen" / "ast.py" - out_path: Path = root / "core" / "ast" / "midas.py" + out_path: Path = root / "midas" / "ast" / "midas.py" src: str = in_path.read_text() generated: str = generate(src) diff --git a/core/ast/json_serializer.py b/midas/ast/json_serializer.py similarity index 99% rename from core/ast/json_serializer.py rename to midas/ast/json_serializer.py index 0064726..d602117 100644 --- a/core/ast/json_serializer.py +++ b/midas/ast/json_serializer.py @@ -1,6 +1,6 @@ from typing import Optional, Sequence -from core.ast.midas import ( +from midas.ast.midas import ( BinaryExpr, ComplexTypeStmt, Expr, diff --git a/core/ast/midas.py b/midas/ast/midas.py similarity index 99% rename from core/ast/midas.py rename to midas/ast/midas.py index f4280fb..28a7819 100644 --- a/core/ast/midas.py +++ b/midas/ast/midas.py @@ -9,7 +9,7 @@ from abc import ABC, abstractmethod from dataclasses import dataclass from typing import Any, Generic, Optional, TypeVar -from lexer.token import Token +from midas.lexer.token import Token T = TypeVar("T") diff --git a/core/ast/printer.py b/midas/ast/printer.py similarity index 99% rename from core/ast/printer.py rename to midas/ast/printer.py index 61fede8..474f0ec 100644 --- a/core/ast/printer.py +++ b/midas/ast/printer.py @@ -5,7 +5,7 @@ from contextlib import contextmanager from enum import Enum, auto from typing import Generator, Generic, Optional, Protocol, TypeVar -import core.ast.midas as m +import midas.ast.midas as m class _Level(Enum): @@ -84,7 +84,7 @@ class AstPrinter(Generic[T]): class MidasAstPrinter(AstPrinter, m.Expr.Visitor[None], m.Stmt.Visitor[None]): - #Statements + # Statements def visit_simple_type_stmt(self, stmt: m.SimpleTypeStmt): self._write_line("SimpleTypeStmt") diff --git a/lexer/__init__.py b/midas/lexer/__init__.py similarity index 100% rename from lexer/__init__.py rename to midas/lexer/__init__.py diff --git a/lexer/base.py b/midas/lexer/base.py similarity index 98% rename from lexer/base.py rename to midas/lexer/base.py index f6f357d..c4f4d82 100644 --- a/lexer/base.py +++ b/midas/lexer/base.py @@ -1,8 +1,8 @@ from abc import ABC, abstractmethod from typing import Any, Callable, Optional -from lexer.position import Position -from lexer.token import Token, TokenType +from midas.lexer.position import Position +from midas.lexer.token import Token, TokenType class MidasSyntaxError(Exception): diff --git a/lexer/keyword.py b/midas/lexer/keyword.py similarity index 87% rename from lexer/keyword.py rename to midas/lexer/keyword.py index e5c4b64..878f8cd 100644 --- a/lexer/keyword.py +++ b/midas/lexer/keyword.py @@ -1,4 +1,4 @@ -from lexer.token import TokenType +from midas.lexer.token import TokenType KEYWORDS: dict[str, TokenType] = { "type": TokenType.TYPE, diff --git a/lexer/midas.py b/midas/lexer/midas.py similarity index 97% rename from lexer/midas.py rename to midas/lexer/midas.py index 054f91d..fe521ce 100644 --- a/lexer/midas.py +++ b/midas/lexer/midas.py @@ -1,6 +1,6 @@ -from lexer.base import Lexer -from lexer.keyword import KEYWORDS -from lexer.token import TokenType +from midas.lexer.base import Lexer +from midas.lexer.keyword import KEYWORDS +from midas.lexer.token import TokenType class MidasLexer(Lexer): diff --git a/lexer/position.py b/midas/lexer/position.py similarity index 99% rename from lexer/position.py rename to midas/lexer/position.py index 306e24d..8ff0972 100644 --- a/lexer/position.py +++ b/midas/lexer/position.py @@ -5,6 +5,7 @@ from typing import Optional @dataclass(frozen=True) class Position: """A simple structure to store the position of a token""" + file: Optional[str] line: int column: int diff --git a/lexer/token.py b/midas/lexer/token.py similarity index 96% rename from lexer/token.py rename to midas/lexer/token.py index 1097493..76a0fb1 100644 --- a/lexer/token.py +++ b/midas/lexer/token.py @@ -2,7 +2,7 @@ from dataclasses import dataclass from enum import Enum, auto from typing import Any -from lexer.position import Position +from midas.lexer.position import Position class TokenType(Enum): diff --git a/parser/base.py b/midas/parser/base.py similarity index 98% rename from parser/base.py rename to midas/parser/base.py index 74962db..255cd26 100644 --- a/parser/base.py +++ b/midas/parser/base.py @@ -2,8 +2,8 @@ from abc import ABC, abstractmethod from dataclasses import dataclass from typing import Generic, TypeVar -from lexer.token import Token, TokenType -from parser.errors import ParsingError +from midas.lexer.token import Token, TokenType +from midas.parser.errors import ParsingError @dataclass(frozen=True) diff --git a/parser/errors.py b/midas/parser/errors.py similarity index 100% rename from parser/errors.py rename to midas/parser/errors.py diff --git a/parser/midas.py b/midas/parser/midas.py similarity index 98% rename from parser/midas.py rename to midas/parser/midas.py index 65e2786..a919994 100644 --- a/parser/midas.py +++ b/midas/parser/midas.py @@ -1,6 +1,6 @@ from typing import Optional -from core.ast.midas import ( +from midas.ast.midas import ( BinaryExpr, ComplexTypeStmt, Expr, @@ -21,9 +21,9 @@ from core.ast.midas import ( VariableExpr, WildcardExpr, ) -from lexer.token import Token, TokenType -from parser.base import Parser -from parser.errors import ParsingError +from midas.lexer.token import Token, TokenType +from midas.parser.base import Parser +from midas.parser.errors import ParsingError class MidasParser(Parser): diff --git a/test.py b/test.py index 048329a..522bbac 100644 --- a/test.py +++ b/test.py @@ -1,10 +1,10 @@ import json from pathlib import Path -from core.ast.printer import MidasAstPrinter -from lexer.midas import MidasLexer -from lexer.token import Token -from parser.midas import MidasParser +from midas.ast.printer import MidasAstPrinter +from midas.lexer.midas import MidasLexer +from midas.lexer.token import Token +from midas.parser.midas import MidasParser def test_midas(): diff --git a/tester.py b/tester.py index 597ddee..3238a67 100644 --- a/tester.py +++ b/tester.py @@ -8,12 +8,12 @@ from dataclasses import asdict, dataclass, field from pathlib import Path from typing import Iterator, Optional -from core.ast.json_serializer import AstJsonSerializer -from core.ast.midas import Stmt -from lexer.base import MidasSyntaxError -from lexer.midas import MidasLexer -from lexer.token import Token -from parser.midas import MidasParser +from midas.ast.json_serializer import AstJsonSerializer +from midas.ast.midas import Stmt +from midas.lexer.base import MidasSyntaxError +from midas.lexer.midas import MidasLexer +from midas.lexer.token import Token +from midas.parser.midas import MidasParser DEFAULT_BASE_DIR: Path = Path() / "tests"