Module: l0_lexer
Source: compiler/stage1_py/l0_lexer.py Language: Python
Symbols
Namespace l0_lexer
Variable l0_lexer.KEYWORDS
Variable l0_lexer._EXPR_ENDING_TOKENS
1
| l0_lexer._EXPR_ENDING_TOKENS
|
Variable l0_lexer.OCT_CHARS
Variable l0_lexer.HEX_CHARS
Function l0_lexer._is_ascii_ident_start
1
| bool l0_lexer._is_ascii_ident_start(str c)
|
Return whether c can start an ASCII Dea identifier.
Function l0_lexer._is_ascii_ident_part
1
| bool l0_lexer._is_ascii_ident_part(str c)
|
Return whether c can continue an ASCII Dea identifier.
Function l0_lexer._logical_predecessor_ends_expression
1
| bool l0_lexer._logical_predecessor_ends_expression(Token token, bool previous)
|
Return whether the parser-visible predecessor ends an expression.
Function l0_lexer.is_reserved_keyword
1
| bool l0_lexer.is_reserved_keyword(str word)
|
Check if a word is a reserved L0 keyword.
Parameters:
Returns: True if the word is a keyword, False otherwise.
Class l0_lexer::TokenKind
Enumeration of all supported token types in L0.
Member Data l0_lexer.TokenKind.EOF
1
| l0_lexer.TokenKind::EOF
|
Member Data l0_lexer.TokenKind.LEXER_ERROR
1
| l0_lexer.TokenKind::LEXER_ERROR
|
Member Data l0_lexer.TokenKind.IDENT
1
| l0_lexer.TokenKind::IDENT
|
Member Data l0_lexer.TokenKind.UNDERSCORE
1
| l0_lexer.TokenKind::UNDERSCORE
|
Member Data l0_lexer.TokenKind.INT
1
| l0_lexer.TokenKind::INT
|
Member Data l0_lexer.TokenKind.BYTE
1
| l0_lexer.TokenKind::BYTE
|
Member Data l0_lexer.TokenKind.STRING
1
| l0_lexer.TokenKind::STRING
|
Member Data l0_lexer.TokenKind.MODULE
1
| l0_lexer.TokenKind::MODULE
|
Member Data l0_lexer.TokenKind.IMPORT
1
| l0_lexer.TokenKind::IMPORT
|
Member Data l0_lexer.TokenKind.FUNC
1
| l0_lexer.TokenKind::FUNC
|
Member Data l0_lexer.TokenKind.STRUCT
1
| l0_lexer.TokenKind::STRUCT
|
Member Data l0_lexer.TokenKind.ENUM
1
| l0_lexer.TokenKind::ENUM
|
Member Data l0_lexer.TokenKind.TYPE
1
| l0_lexer.TokenKind::TYPE
|
Member Data l0_lexer.TokenKind.EXTERN
1
| l0_lexer.TokenKind::EXTERN
|
Member Data l0_lexer.TokenKind.LET
1
| l0_lexer.TokenKind::LET
|
Member Data l0_lexer.TokenKind.RETURN
1
| l0_lexer.TokenKind::RETURN
|
Member Data l0_lexer.TokenKind.MATCH
1
| l0_lexer.TokenKind::MATCH
|
Member Data l0_lexer.TokenKind.CASE
1
| l0_lexer.TokenKind::CASE
|
Member Data l0_lexer.TokenKind.IF
Member Data l0_lexer.TokenKind.ELSE
1
| l0_lexer.TokenKind::ELSE
|
Member Data l0_lexer.TokenKind.WHILE
1
| l0_lexer.TokenKind::WHILE
|
Member Data l0_lexer.TokenKind.FOR
1
| l0_lexer.TokenKind::FOR
|
Member Data l0_lexer.TokenKind.BREAK
1
| l0_lexer.TokenKind::BREAK
|
Member Data l0_lexer.TokenKind.CONTINUE
1
| l0_lexer.TokenKind::CONTINUE
|
Member Data l0_lexer.TokenKind.TRUE
1
| l0_lexer.TokenKind::TRUE
|
Member Data l0_lexer.TokenKind.FALSE
1
| l0_lexer.TokenKind::FALSE
|
Member Data l0_lexer.TokenKind.NULL
1
| l0_lexer.TokenKind::NULL
|
Member Data l0_lexer.TokenKind.AS
Member Data l0_lexer.TokenKind.NEW
1
| l0_lexer.TokenKind::NEW
|
Member Data l0_lexer.TokenKind.DROP
1
| l0_lexer.TokenKind::DROP
|
Member Data l0_lexer.TokenKind.WITH
1
| l0_lexer.TokenKind::WITH
|
Member Data l0_lexer.TokenKind.CLEANUP
1
| l0_lexer.TokenKind::CLEANUP
|
Member Data l0_lexer.TokenKind.LBRACE
1
| l0_lexer.TokenKind::LBRACE
|
Member Data l0_lexer.TokenKind.RBRACE
1
| l0_lexer.TokenKind::RBRACE
|
Member Data l0_lexer.TokenKind.LPAREN
1
| l0_lexer.TokenKind::LPAREN
|
Member Data l0_lexer.TokenKind.RPAREN
1
| l0_lexer.TokenKind::RPAREN
|
Member Data l0_lexer.TokenKind.LBRACKET
1
| l0_lexer.TokenKind::LBRACKET
|
Member Data l0_lexer.TokenKind.RBRACKET
1
| l0_lexer.TokenKind::RBRACKET
|
Member Data l0_lexer.TokenKind.COMMA
1
| l0_lexer.TokenKind::COMMA
|
Member Data l0_lexer.TokenKind.SEMI
1
| l0_lexer.TokenKind::SEMI
|
Member Data l0_lexer.TokenKind.COLON
1
| l0_lexer.TokenKind::COLON
|
Member Data l0_lexer.TokenKind.DOUBLE_COLON
1
| l0_lexer.TokenKind::DOUBLE_COLON
|
Member Data l0_lexer.TokenKind.ARROW_FUNC
1
| l0_lexer.TokenKind::ARROW_FUNC
|
Member Data l0_lexer.TokenKind.ARROW_MATCH
1
| l0_lexer.TokenKind::ARROW_MATCH
|
Member Data l0_lexer.TokenKind.EQ
Member Data l0_lexer.TokenKind.PLUS
1
| l0_lexer.TokenKind::PLUS
|
Member Data l0_lexer.TokenKind.MINUS
1
| l0_lexer.TokenKind::MINUS
|
Member Data l0_lexer.TokenKind.STAR
1
| l0_lexer.TokenKind::STAR
|
Member Data l0_lexer.TokenKind.SLASH
1
| l0_lexer.TokenKind::SLASH
|
Member Data l0_lexer.TokenKind.MODULO
1
| l0_lexer.TokenKind::MODULO
|
Member Data l0_lexer.TokenKind.LT
Member Data l0_lexer.TokenKind.GT
Member Data l0_lexer.TokenKind.LE
Member Data l0_lexer.TokenKind.GE
Member Data l0_lexer.TokenKind.EQEQ
1
| l0_lexer.TokenKind::EQEQ
|
Member Data l0_lexer.TokenKind.NE
Member Data l0_lexer.TokenKind.ANDAND
1
| l0_lexer.TokenKind::ANDAND
|
Member Data l0_lexer.TokenKind.OROR
1
| l0_lexer.TokenKind::OROR
|
Member Data l0_lexer.TokenKind.BANG
1
| l0_lexer.TokenKind::BANG
|
Member Data l0_lexer.TokenKind.QUESTION
1
| l0_lexer.TokenKind::QUESTION
|
Member Data l0_lexer.TokenKind.DOT
1
| l0_lexer.TokenKind::DOT
|
Member Data l0_lexer.TokenKind.AMP
1
| l0_lexer.TokenKind::AMP
|
Member Data l0_lexer.TokenKind.PIPE
1
| l0_lexer.TokenKind::PIPE
|
Member Data l0_lexer.TokenKind.CARET
1
| l0_lexer.TokenKind::CARET
|
Member Data l0_lexer.TokenKind.TILDE
1
| l0_lexer.TokenKind::TILDE
|
Member Data l0_lexer.TokenKind.LSHIFT
1
| l0_lexer.TokenKind::LSHIFT
|
Member Data l0_lexer.TokenKind.RSHIFT
1
| l0_lexer.TokenKind::RSHIFT
|
Member Data l0_lexer.TokenKind.FUTURE_EXTENSION
1
| l0_lexer.TokenKind::FUTURE_EXTENSION
|
Class l0_lexer::Token
A single token produced by the lexer.
Member Data l0_lexer.Token.kind
Member Data l0_lexer.Token.text
Member Data l0_lexer.Token.line
Member Data l0_lexer.Token.column
Member Data l0_lexer.Token.diagnostic
Member Data l0_lexer.Token.diagnostics
Member Data l0_lexer.Token.recovery
Function l0_lexer.Token.__repr__
1
| str l0_lexer.Token.__repr__(self)
|
Returns a string representation of the token.
Class l0_lexer::Lexer
Tokenizes L0 source code.
This lexer scans source text and produces a list of Token objects. It tracks line and column information for diagnostics.
Member Data l0_lexer.Lexer.source
Member Data l0_lexer.Lexer.filename
1
| l0_lexer.Lexer::filename
|
Member Data l0_lexer.Lexer.length
Member Data l0_lexer.Lexer.index
Member Data l0_lexer.Lexer.line
Member Data l0_lexer.Lexer.column
Member Data l0_lexer.Lexer.diagnostics
1
| l0_lexer.Lexer::diagnostics
|
Member Data l0_lexer.Lexer._prev_ends_expression
1
| l0_lexer.Lexer::_prev_ends_expression
|
Function l0_lexer.Lexer.__init__
1
| None l0_lexer.Lexer.__init__(self, str source, str filename="<input>", Optional[List[Diagnostic]] diagnostics=None)
|
Initialize the lexer.
Parameters:
source: The source code text.filename: The source filename for diagnostics.diagnostics: Optional list to collect diagnostics into. Function l0_lexer.Lexer.from_source
1
| "Lexer" l0_lexer.Lexer.from_source(cls, str source)
|
Create a lexer from a source string with default settings.
Parameters:
source: The source code text.
Returns: A new Lexer instance.
Function l0_lexer.Lexer.tokenize
1
| List[Token] l0_lexer.Lexer.tokenize(self)
|
Perform tokenization of the source string.
Returns: A list of all tokens, ending with an EOF token.
Function l0_lexer.Lexer._error
1
| None l0_lexer.Lexer._error(self, str message, int line, int column)
|
Add an error diagnostic.
Function l0_lexer.Lexer._lexer_error_token
1
| Token l0_lexer.Lexer._lexer_error_token(self, str text, int line, int column, List[Diagnostic] diagnostics, Optional[Token] recovery=None)
|
Build a deferred lexer-error wrapper token.
Function l0_lexer.Lexer._wrap_new_diagnostics
1
| Token l0_lexer.Lexer._wrap_new_diagnostics(self, int diagnostic_start, str text, int line, int column, Token recovery)
|
Move newly emitted recoverable diagnostics into a wrapper token.
Function l0_lexer.Lexer._at_end
1
| bool l0_lexer.Lexer._at_end(self)
|
Check if all input has been scanned.
Function l0_lexer.Lexer._peek
1
| str l0_lexer.Lexer._peek(self)
|
Peek at the current character without advancing.
Function l0_lexer.Lexer._peek_next
1
| str l0_lexer.Lexer._peek_next(self)
|
Peek at the next character without advancing.
Function l0_lexer.Lexer._advance
1
| str l0_lexer.Lexer._advance(self)
|
Advance the current index and return the character.
Function l0_lexer.Lexer._next_token
1
| Token l0_lexer.Lexer._next_token(self)
|
Scan and return the next token.
Function l0_lexer.Lexer._read_byte_literal
1
| str l0_lexer.Lexer._read_byte_literal(self, int start_col, int start_line)
|
Scan a byte/character literal.
Function l0_lexer.Lexer._read_string_literal
1
| str l0_lexer.Lexer._read_string_literal(self)
|
Scan a double-quoted string literal.
Function l0_lexer.Lexer._read_valid_char_escape
1
| str l0_lexer.Lexer._read_valid_char_escape(self)
|
Scan a single escape sequence.
Function l0_lexer.Lexer._read_number
1
| str l0_lexer.Lexer._read_number(self, str c, int start_col, int start_line, bool is_negative=False)
|
Scan an integer literal.
1
| None l0_lexer.Lexer._skip_ws_and_comments(self)
|
Skip whitespace and both line and block comments.
Function l0_lexer.Lexer._collect_invalid_characters
1
| str l0_lexer.Lexer._collect_invalid_characters(self)
|
Consume the rest of an invalid-character run and return its text.
The run stops at printable ASCII or whitespace, so a diagnostic span never crosses a line break.