Files
TransPyC/includes/ast/__init__.vp
T
TermiNexus 915054495f fix(ast): 补齐 exprs 字段访问辅助函数 re-export
5cda173 只补了 attribute_get_attr,TypeGen 还以 ast.<helper> 调用
attribute_get_value/name_get_id/constant_get_str_val/binop_get_left/
binop_get_right(均定义在 ast.exprs)→ 同样触发跨模块返回类型解析
fail-fast。一次性全部补入 from .exprs import 导出列表。
2026-08-19 05:26:26 +08:00

122 lines
4.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import t, c
from stdint import *
import memhub
import string
# Import submodule
from .tokens import (
Token, TokenType, Keyword, TokOp, _init_tables,
)
# Common Section: Base Classes, Enums, Constants, Helper Functions, Dump
from .base import (
AST, Stmt, ExprNode, ASTKind, ASTCtx, OpKind, ASTFlag,
# Constants
CONST_INT, CONST_FLOAT, CONST_STR, CONST_BOOL, CONST_NONE, CONST_CHAR,
FLAG_IS_ASYNC, FLAG_SIMPLE, FLAG_HAS_STAR,
# Helper Functions
_init_ast, _copy_str, _set_pos, _inherit_pos, _set_parent_list,
_binop_from_op, _augop_from_op, _cmpop_from_op,
_emit, _emit_str, _emit_int, _dump_list,
dump, _op_name,
)
# Statement Nodes: Module, Expression, Interactive, FunctionType
from .stmts import (
# Module Layer
Module, Expression, Interactive, FunctionType,
# Statement
FunctionDef, ClassDef, Return, Delete, Assign, AugAssign, AnnAssign,
For, While, If, With, Raise, Try, Assert, Global, Nonlocal,
Pass, Break, Continue, Expr, Import, ImportFrom, Match,
)
# Expression Nodes: BoolOp, BinOp, UnaryOp, Lambda, IfExp, Dict, Set
from .exprs import (
# Expression Layer
BoolOp, BinOp, UnaryOp, Lambda, IfExp, Dict, Set,
ListComp, SetComp, DictComp, GeneratorExp,
Await, Yield, YieldFrom, FormattedValue, JoinedStr,
Constant, NamedExpr, Attribute, Subscript, Starred, Name,
List, Tuple, Slice,
Call, Compare, OpNode,
# 字段访问辅助函数(TPV TypeGen 以 ast.<helper> 跨模块调用;未 re-export
# 时跨模块函数返回类型解析在 ast 包 text.ll 找不到定义(定义在 ast.exprs)
# → fail-fast "返回类型无法精确获取",如 attribute_get_attr/attribute_get_value)
name_get_id, constant_get_str_val,
binop_get_left, binop_get_right,
attribute_get_attr, attribute_get_value,
)
# Auxiliary Nodes
from .astaux import (
ExceptHandler, Arguments, Arg, Keyword, Alias, WithItem,
Comprehension,
)
# Pattern Matching
from .match import (
MatchCase, MatchValue, MatchSingleton, MatchSequence,
MatchMapping, MatchClass, MatchStar, MatchAs, MatchOr,
)
# from .visitor import ASTVisitor
from .lexer import Lexer, _lexer_init, tokenize, new_lexer
from .parser import Parser, _parser_init, parse_tokens, new_parser
from .parser import _parse_test
from .parser import _dbg_lookup_lit_val, _dbg_lit_found
from .parser import get_parse_err_line, get_parse_err_col, get_parse_err_msg
# ============================================================
# Global Memory Pool Pointer (follows project rules: declare _mbuddy)
# User initializes in main: ast._mbuddy = memhub.MemBuddy(arena, size)
# ============================================================
_mbuddy: memhub.MemBuddy | t.CPtr
# ============================================================
# Common API: parse
# ============================================================
def parse(src: str, pool: memhub.MemManager | t.CPtr) -> AST | t.CPtr:
"""Parse Python source code, return the AST Module node.
Parameters:
src: NUL source code string, terminated with NUL
pool: memhub.MemManager instance, to allocate AST nodes
Returns:
AST Module node, or None
"""
if src is None or pool is None:
return None
_init_tables(pool)
lx: Lexer | t.CPtr = new_lexer(pool)
if lx is None:
return None
_lexer_init(lx, src, pool)
tokens: Token | t.CPtr = tokenize(lx)
if tokens is None:
return None
tree: AST | t.CPtr = parse_tokens(pool, tokens)
return tree
def parse_expression(src: str, pool: memhub.MemManager | t.CPtr) -> AST | t.CPtr:
"""Parse a single expression, return the Expression node.
Parameters:
src: NUL expression string, terminated with NUL
pool: memhub.MemManager instance, to allocate AST nodes
Returns:
Expression node, or None
"""
if src is None or pool is None:
return None
_init_tables(pool)
lx: Lexer | t.CPtr = new_lexer(pool)
if lx is None: return None
_lexer_init(lx, src, pool)
tokens: Token | t.CPtr = tokenize(lx)
if tokens is None: return None
ps: Parser | t.CPtr = new_parser(pool)
if ps is None: return None
_parser_init(ps, tokens, pool)
body: AST | t.CPtr = _parse_test(ps)
return Expression(pool, body)