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)
|
return visitor.visit_{func_name}(self)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
def snake_case(text: str) -> str:
|
def snake_case(text: str) -> str:
|
||||||
return re.sub(r"[A-Z]", lambda c: "_" + c.group().lower(), text).lower().strip("_")
|
return re.sub(r"[A-Z]", lambda c: "_" + c.group().lower(), text).lower().strip("_")
|
||||||
|
|
||||||
|
|
||||||
def make_visitor_method(cls: str, param: str):
|
def make_visitor_method(cls: str, param: str):
|
||||||
method: str = VISITOR_METHOD_TEMPLATE.format(
|
method: str = VISITOR_METHOD_TEMPLATE.format(
|
||||||
func_name=snake_case(cls),
|
func_name=snake_case(cls), param=param, cls=cls
|
||||||
param=param,
|
|
||||||
cls=cls
|
|
||||||
)
|
)
|
||||||
return method.strip("\n")
|
return method.strip("\n")
|
||||||
|
|
||||||
|
|
||||||
def make_class(name: str, cls: str, base: str):
|
def make_class(name: str, cls: str, base: str):
|
||||||
body: str = cls.split("\n", 1)[1]
|
body: str = cls.split("\n", 1)[1]
|
||||||
func_name: str = snake_case(name)
|
func_name: str = snake_case(name)
|
||||||
@@ -88,6 +89,7 @@ def make_class(name: str, cls: str, base: str):
|
|||||||
)
|
)
|
||||||
return cls_def.strip("\n")
|
return cls_def.strip("\n")
|
||||||
|
|
||||||
|
|
||||||
def generate(src: str):
|
def generate(src: str):
|
||||||
classes: list[str] = src.split("\n\n")
|
classes: list[str] = src.split("\n\n")
|
||||||
stmt_visitor_methods: list[str] = []
|
stmt_visitor_methods: list[str] = []
|
||||||
@@ -114,10 +116,11 @@ def generate(src: str):
|
|||||||
expressions="\n\n\n".join(expressions),
|
expressions="\n\n\n".join(expressions),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
root: Path = Path(__file__).parent.parent
|
root: Path = Path(__file__).parent.parent
|
||||||
in_path: Path = root / "gen" / "ast.py"
|
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()
|
src: str = in_path.read_text()
|
||||||
generated: str = generate(src)
|
generated: str = generate(src)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from typing import Optional, Sequence
|
from typing import Optional, Sequence
|
||||||
|
|
||||||
from core.ast.midas import (
|
from midas.ast.midas import (
|
||||||
BinaryExpr,
|
BinaryExpr,
|
||||||
ComplexTypeStmt,
|
ComplexTypeStmt,
|
||||||
Expr,
|
Expr,
|
||||||
@@ -9,7 +9,7 @@ from abc import ABC, abstractmethod
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Any, Generic, Optional, TypeVar
|
from typing import Any, Generic, Optional, TypeVar
|
||||||
|
|
||||||
from lexer.token import Token
|
from midas.lexer.token import Token
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
|
||||||
@@ -5,7 +5,7 @@ from contextlib import contextmanager
|
|||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from typing import Generator, Generic, Optional, Protocol, TypeVar
|
from typing import Generator, Generic, Optional, Protocol, TypeVar
|
||||||
|
|
||||||
import core.ast.midas as m
|
import midas.ast.midas as m
|
||||||
|
|
||||||
|
|
||||||
class _Level(Enum):
|
class _Level(Enum):
|
||||||
@@ -84,7 +84,7 @@ class AstPrinter(Generic[T]):
|
|||||||
|
|
||||||
|
|
||||||
class MidasAstPrinter(AstPrinter, m.Expr.Visitor[None], m.Stmt.Visitor[None]):
|
class MidasAstPrinter(AstPrinter, m.Expr.Visitor[None], m.Stmt.Visitor[None]):
|
||||||
#Statements
|
# Statements
|
||||||
|
|
||||||
def visit_simple_type_stmt(self, stmt: m.SimpleTypeStmt):
|
def visit_simple_type_stmt(self, stmt: m.SimpleTypeStmt):
|
||||||
self._write_line("SimpleTypeStmt")
|
self._write_line("SimpleTypeStmt")
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from typing import Any, Callable, Optional
|
from typing import Any, Callable, Optional
|
||||||
|
|
||||||
from lexer.position import Position
|
from midas.lexer.position import Position
|
||||||
from lexer.token import Token, TokenType
|
from midas.lexer.token import Token, TokenType
|
||||||
|
|
||||||
|
|
||||||
class MidasSyntaxError(Exception):
|
class MidasSyntaxError(Exception):
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
from lexer.token import TokenType
|
from midas.lexer.token import TokenType
|
||||||
|
|
||||||
KEYWORDS: dict[str, TokenType] = {
|
KEYWORDS: dict[str, TokenType] = {
|
||||||
"type": TokenType.TYPE,
|
"type": TokenType.TYPE,
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
from lexer.base import Lexer
|
from midas.lexer.base import Lexer
|
||||||
from lexer.keyword import KEYWORDS
|
from midas.lexer.keyword import KEYWORDS
|
||||||
from lexer.token import TokenType
|
from midas.lexer.token import TokenType
|
||||||
|
|
||||||
|
|
||||||
class MidasLexer(Lexer):
|
class MidasLexer(Lexer):
|
||||||
@@ -5,6 +5,7 @@ from typing import Optional
|
|||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
class Position:
|
class Position:
|
||||||
"""A simple structure to store the position of a token"""
|
"""A simple structure to store the position of a token"""
|
||||||
|
|
||||||
file: Optional[str]
|
file: Optional[str]
|
||||||
line: int
|
line: int
|
||||||
column: int
|
column: int
|
||||||
@@ -2,7 +2,7 @@ from dataclasses import dataclass
|
|||||||
from enum import Enum, auto
|
from enum import Enum, auto
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from lexer.position import Position
|
from midas.lexer.position import Position
|
||||||
|
|
||||||
|
|
||||||
class TokenType(Enum):
|
class TokenType(Enum):
|
||||||
@@ -2,8 +2,8 @@ from abc import ABC, abstractmethod
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import Generic, TypeVar
|
from typing import Generic, TypeVar
|
||||||
|
|
||||||
from lexer.token import Token, TokenType
|
from midas.lexer.token import Token, TokenType
|
||||||
from parser.errors import ParsingError
|
from midas.parser.errors import ParsingError
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@dataclass(frozen=True)
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from core.ast.midas import (
|
from midas.ast.midas import (
|
||||||
BinaryExpr,
|
BinaryExpr,
|
||||||
ComplexTypeStmt,
|
ComplexTypeStmt,
|
||||||
Expr,
|
Expr,
|
||||||
@@ -21,9 +21,9 @@ from core.ast.midas import (
|
|||||||
VariableExpr,
|
VariableExpr,
|
||||||
WildcardExpr,
|
WildcardExpr,
|
||||||
)
|
)
|
||||||
from lexer.token import Token, TokenType
|
from midas.lexer.token import Token, TokenType
|
||||||
from parser.base import Parser
|
from midas.parser.base import Parser
|
||||||
from parser.errors import ParsingError
|
from midas.parser.errors import ParsingError
|
||||||
|
|
||||||
|
|
||||||
class MidasParser(Parser):
|
class MidasParser(Parser):
|
||||||
8
test.py
8
test.py
@@ -1,10 +1,10 @@
|
|||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from core.ast.printer import MidasAstPrinter
|
from midas.ast.printer import MidasAstPrinter
|
||||||
from lexer.midas import MidasLexer
|
from midas.lexer.midas import MidasLexer
|
||||||
from lexer.token import Token
|
from midas.lexer.token import Token
|
||||||
from parser.midas import MidasParser
|
from midas.parser.midas import MidasParser
|
||||||
|
|
||||||
|
|
||||||
def test_midas():
|
def test_midas():
|
||||||
|
|||||||
12
tester.py
12
tester.py
@@ -8,12 +8,12 @@ from dataclasses import asdict, dataclass, field
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Iterator, Optional
|
from typing import Iterator, Optional
|
||||||
|
|
||||||
from core.ast.json_serializer import AstJsonSerializer
|
from midas.ast.json_serializer import AstJsonSerializer
|
||||||
from core.ast.midas import Stmt
|
from midas.ast.midas import Stmt
|
||||||
from lexer.base import MidasSyntaxError
|
from midas.lexer.base import MidasSyntaxError
|
||||||
from lexer.midas import MidasLexer
|
from midas.lexer.midas import MidasLexer
|
||||||
from lexer.token import Token
|
from midas.lexer.token import Token
|
||||||
from parser.midas import MidasParser
|
from midas.parser.midas import MidasParser
|
||||||
|
|
||||||
DEFAULT_BASE_DIR: Path = Path() / "tests"
|
DEFAULT_BASE_DIR: Path = Path() / "tests"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user