99 lines
2.3 KiB
Python
99 lines
2.3 KiB
Python
""" Module for the parser """
|
|
from pathlib import Path
|
|
from lark import Lark
|
|
from .classes import Ziffers
|
|
from .mapper import ZiffersTransformer
|
|
|
|
|
|
grammar_path = Path(__file__).parent
|
|
grammar = grammar_path / "ziffers.lark"
|
|
|
|
ziffers_parser = Lark.open(
|
|
grammar,
|
|
rel_to=__file__,
|
|
start="root",
|
|
parser="lalr",
|
|
transformer=ZiffersTransformer(),
|
|
)
|
|
|
|
|
|
def parse_expression(expr: str) -> Ziffers:
|
|
"""Parse an expression using the Ziffers parser
|
|
|
|
Args:
|
|
expr (str): Ziffers expression as a string
|
|
|
|
Returns:
|
|
Ziffers: Reutrns Ziffers iterable
|
|
"""
|
|
return ziffers_parser.parse(expr)
|
|
|
|
|
|
def zparse(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Parses ziffers expression with options
|
|
|
|
Args:
|
|
expr (str): Ziffers expression as a string
|
|
opts (dict, optional): Options for parsing the Ziffers expression. Defaults to None.
|
|
|
|
Returns:
|
|
Ziffers: Returns Ziffers iterable parsed with the given options
|
|
"""
|
|
parsed = parse_expression(expr)
|
|
if opts:
|
|
parsed.set_defaults(opts)
|
|
return parsed
|
|
|
|
|
|
# pylint: disable=invalid-name
|
|
|
|
|
|
def z0(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Shortened method name for zparse"""
|
|
return zparse(expr, opts)
|
|
|
|
|
|
def z1(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Shortened method name for zparse"""
|
|
return zparse(expr, opts)
|
|
|
|
|
|
def z2(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Shortened method name for zparse"""
|
|
return zparse(expr, opts)
|
|
|
|
|
|
def z3(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Shortened method name for zparse"""
|
|
return zparse(expr, opts)
|
|
|
|
|
|
def z4(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Shortened method name for zparse"""
|
|
return zparse(expr, opts)
|
|
|
|
|
|
def z5(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Shortened method name for zparse"""
|
|
return zparse(expr, opts)
|
|
|
|
|
|
def z6(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Shortened method name for zparse"""
|
|
return zparse(expr, opts)
|
|
|
|
|
|
def z7(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Shortened method name for zparse"""
|
|
return zparse(expr, opts)
|
|
|
|
|
|
def z8(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Shortened method name for zparse"""
|
|
return zparse(expr, opts)
|
|
|
|
|
|
def z9(expr: str, opts: dict = None) -> Ziffers:
|
|
"""Shortened method name for zparse"""
|
|
return zparse(expr, opts)
|