"""Module for Grammar class."""
from ..tokens.token import BaseToken
type TokenList = list[BaseToken | tuple[BaseToken, TokenList]]
[docs]
class Grammar:
"""Class representing a grammar.
:var lineno: Line number the grammar is defined in.
:var name: Name of the grammar.
:var tokens: Tokens in this grammar.
:var inherits: Name of the inherited grammar or None.
"""
def __init__(
self,
lineno: int,
name: str,
tokens: TokenList,
inherits: str | None = None,
) -> None:
"""Init of Grammar.
:param lineno: Line number the grammar is defined in.
:param name: Name of the grammar.
:param tokens: Tokens in this grammar.
:param inherits: Name of the inherited grammar or None.
"""
self.lineno = lineno
self.name = name
self.tokens = tokens
self.inherits = inherits
def __repr__(self) -> str:
"""Return string representation of this object."""
name = self.__class__.__name__
return f"<{name} {self.name}({self.inherits}) {list(self.tokens)}>"