DollarLineTransfomer,
        NoteLineTransformer,
        TextLineTransformer,
        ParallelLineTransformer,
        TranslationLineTransformer,
):
    def empty_line(self, _):
        return EmptyLine()

    @v_args(inline=True)
    def control_line(self, prefix, content):
        return ControlLine(prefix, content)


WORD_PARSER = Lark.open("ebl_atf.lark",
                        maybe_placeholders=True,
                        rel_to=__file__,
                        start="any_word")
NOTE_LINE_PARSER = Lark.open("ebl_atf.lark",
                             maybe_placeholders=True,
                             rel_to=__file__,
                             start="note_line")
MARKUP_PARSER = Lark.open("ebl_atf.lark",
                          maybe_placeholders=True,
                          rel_to=__file__,
                          start="markup")
PARALLEL_LINE_PARSER = Lark.open("ebl_atf.lark",
                                 maybe_placeholders=True,
                                 rel_to=__file__,
                                 start="parallel_line")
TRANSLATION_LINE_PARSER = Lark.open("ebl_atf.lark",
                                    maybe_placeholders=True,
Exemple #2
0
 def _Lark_open(gfilename, **kwargs):
     return Lark.open(gfilename,
                      lexer=LEXER,
                      parser=PARSER,
                      propagate_positions=True,
                      **kwargs)
Exemple #3
0
from typing import Sequence

from lark.exceptions import ParseError, UnexpectedInput
from lark.lark import Lark

from ebl.transliteration.domain.normalized_akkadian import AkkadianWord, Break
from ebl.transliteration.domain.text_line_transformer import TextLineTransformer
from ebl.transliteration.domain.tokens import Token

RECONSTRUCTED_LINE_PARSER = Lark.open(
    "ebl_atf.lark",
    maybe_placeholders=True,
    rel_to=__file__,
    start="ebl_atf_text_line__text",
)


def parse_reconstructed_word(word: str) -> AkkadianWord:
    tree = RECONSTRUCTED_LINE_PARSER.parse(
        word, start="ebl_atf_text_line__akkadian_word")
    return TextLineTransformer().transform(tree)


def parse_break(break_: str) -> Break:
    tree = RECONSTRUCTED_LINE_PARSER.parse(break_,
                                           start="ebl_atf_text_line__break")
    return TextLineTransformer().transform(tree)


def parse_reconstructed_line(text: str) -> Sequence[Token]:
    try:
Exemple #4
0
    @v_args(inline=True)
    def ebl_atf_text_line__surface_label(
            self, surface: Token, status: Sequence[Status]) -> SurfaceLabel:
        return SurfaceLabel.from_label(
            Surface.from_label(surface),
            status  # pyre-ignore[6]
        )

    @v_args(inline=True)
    def ebl_atf_text_line__object_label(
            self, object_: Token, status: Sequence[Status]) -> ObjectLabel:
        return ObjectLabel.from_object(Object(object_), status)

    def ebl_atf_text_line__status(
            self, children: Iterable[Token]) -> Sequence[Status]:
        return tuple(Status(token) for token in children)


LABEL_PARSER = Lark.open("ebl_atf.lark",
                         maybe_placeholders=True,
                         rel_to=__file__,
                         start="labels")


def parse_labels(label: str) -> Sequence[Label]:
    if label:
        tree = LABEL_PARSER.parse(label)
        return LabelTransformer().transform(tree)
    else:
        return tuple()