refactor: move source files in subdirectory
This commit is contained in:
11
gen/gen.py
11
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)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from typing import Optional, Sequence
|
||||
|
||||
from core.ast.midas import (
|
||||
from midas.ast.midas import (
|
||||
BinaryExpr,
|
||||
ComplexTypeStmt,
|
||||
Expr,
|
||||
@@ -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")
|
||||
|
||||
@@ -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")
|
||||
@@ -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):
|
||||
@@ -1,4 +1,4 @@
|
||||
from lexer.token import TokenType
|
||||
from midas.lexer.token import TokenType
|
||||
|
||||
KEYWORDS: dict[str, TokenType] = {
|
||||
"type": TokenType.TYPE,
|
||||
@@ -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):
|
||||
@@ -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
|
||||
@@ -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):
|
||||
@@ -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)
|
||||
@@ -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):
|
||||
8
test.py
8
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():
|
||||
|
||||
12
tester.py
12
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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user