docs: add some docstrings in lexer classes
This commit is contained in:
@@ -16,9 +16,10 @@ class Lexer(ABC):
|
|||||||
"""An abstract lexer which provides methods to easily extend it into a concrete one
|
"""An abstract lexer which provides methods to easily extend it into a concrete one
|
||||||
|
|
||||||
This implementation is based on the [_Crafting Interpreters_][1] book by Robert Nystrom,
|
This implementation is based on the [_Crafting Interpreters_][1] book by Robert Nystrom,
|
||||||
more specifically on my [previous Python implementation](https://git.kb28.ch/HEL/pebble)
|
more specifically on my [previous Python implementation][2]
|
||||||
|
|
||||||
[1]: https://craftinginterpreters.com/
|
[1]: https://craftinginterpreters.com/
|
||||||
|
[2]: https://git.kb28.ch/HEL/pebble
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, source: str, file: Optional[str] = None) -> None:
|
def __init__(self, source: str, file: Optional[str] = None) -> None:
|
||||||
@@ -168,6 +169,6 @@ class Lexer(ABC):
|
|||||||
def scan_token(self) -> None:
|
def scan_token(self) -> None:
|
||||||
"""Scan a token
|
"""Scan a token
|
||||||
|
|
||||||
This function should (at least) consume the current character and produce the appropriate token(s), using `add_token`
|
This function should (at least) consume the current character and produce the appropriate token(s), using :func:`add_token`
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -81,6 +81,12 @@ class MidasLexer(Lexer):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
def scan_string(self, opening: str):
|
def scan_string(self, opening: str):
|
||||||
|
"""Scan the rest of a string and add it as a token
|
||||||
|
|
||||||
|
Args:
|
||||||
|
opening (str): the opening quote or double quote, to be matched
|
||||||
|
at the end of the string
|
||||||
|
"""
|
||||||
while self.peek() != opening and not self.is_at_end():
|
while self.peek() != opening and not self.is_at_end():
|
||||||
self.advance()
|
self.advance()
|
||||||
|
|
||||||
@@ -147,6 +153,18 @@ class MidasLexer(Lexer):
|
|||||||
self.add_token(TokenType.COMMENT)
|
self.add_token(TokenType.COMMENT)
|
||||||
|
|
||||||
def is_identifier_char(self, char: str, *, start: bool) -> bool:
|
def is_identifier_char(self, char: str, *, start: bool) -> bool:
|
||||||
|
"""Check whether a character is a valid as part of an identifier
|
||||||
|
|
||||||
|
Identifiers can contain any alphanumerical character or underscore.
|
||||||
|
They cannot start with a digit.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
char (str): the character to check
|
||||||
|
start (bool): whether this is the first character of the identifier
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: `True` if the character is valid, `False` otherwise
|
||||||
|
"""
|
||||||
if char == "_":
|
if char == "_":
|
||||||
return True
|
return True
|
||||||
if char.isalpha():
|
if char.isalpha():
|
||||||
|
|||||||
@@ -104,6 +104,15 @@ class Token:
|
|||||||
)
|
)
|
||||||
|
|
||||||
def location_to(self, to: Token) -> Location:
|
def location_to(self, to: Token) -> Location:
|
||||||
|
"""Create a new :class:`Location` spanning from this token to another
|
||||||
|
|
||||||
|
Args:
|
||||||
|
to (Token): the end token
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Location: a new :class:`Location` starting at this token and ending
|
||||||
|
at `to`, both included
|
||||||
|
"""
|
||||||
return Location.span(self.get_location(), to.get_location())
|
return Location.span(self.get_location(), to.get_location())
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|||||||
Reference in New Issue
Block a user