refactor: move source files in subdirectory

This commit is contained in:
2026-05-22 11:05:47 +02:00
parent b5969e9a2b
commit 6e0190a378
15 changed files with 35 additions and 31 deletions

View File

@@ -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)

View File

@@ -1,6 +1,6 @@
from typing import Optional, Sequence
from core.ast.midas import (
from midas.ast.midas import (
BinaryExpr,
ComplexTypeStmt,
Expr,

View File

@@ -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")

View File

@@ -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")

View File

@@ -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):

View File

@@ -1,4 +1,4 @@
from lexer.token import TokenType
from midas.lexer.token import TokenType
KEYWORDS: dict[str, TokenType] = {
"type": TokenType.TYPE,

View File

@@ -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):

View File

@@ -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

View File

@@ -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):

View File

@@ -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)

View File

@@ -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):

View File

@@ -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():

View File

@@ -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"