Module

lexer.scanners.block

Block mode scanner mixin.

Classes

BlockScannerMixin 11
Mixin providing block mode scanning logic. Scans for block-level elements using window approach: 1…

Mixin providing block mode scanning logic.

Scans for block-level elements using window approach:

  1. Find end of current line (window)
  2. Classify the line content (pure logic)
  3. Emit token and commit position (always advances)

Attributes

Name Type Description
_source str
_pos int
_consumed_newline bool
_text_transformer Callable[[str], str] | None

Methods

Internal Methods 7
_save_location 0
Save current location for O(1) token location creation.
def _save_location(self) -> None
_find_line_end 0 int
Find end of current line.
def _find_line_end(self) -> int
Returns
int
_calc_indent 1 tuple[int, int]
Calculate indent level and content start position.
def _calc_indent(self, line: str) -> tuple[int, int]
Parameters
Name Type Description
line
Returns
tuple[int, int]
_chars_for_indent 2 int
Calculate how many characters to skip to consume target_indent spaces.
def _chars_for_indent(self, line: str, target_indent: int) -> int
Parameters
Name Type Description
line
target_indent
Returns
int
_commit_to 1
Commit position to line_end.
def _commit_to(self, line_end: int) -> None
Parameters
Name Type Description
line_end
_make_token 6 Token
Create token with raw coordinates. Implemented by Lexer.
def _make_token(self, token_type: TokenType, value: str, start_pos: int, *, start_col: int | None = None, end_pos: int | None = None, line_indent: int = -1) -> Token
Parameters
Name Type Description
token_type
value
start_pos
start_col Default:None
end_pos Default:None
line_indent Default:-1
Returns
Token
_scan_block 0 Iterator[Token]
Scan for block-level elements using window approach.
def _scan_block(self) -> Iterator[Token]
Returns
Iterator[Token]