Exemplo n.º 1
0
def parse_document(
    txt: str, version: Optional[str] = None, uri: str = "", imported: bool = False
) -> D.Document:
    if version is None:
        # for now assume the version is 1.0 if the first line is "version <number>"
        # otherwise draft-2
        version = "draft-2"
        for line in txt.split("\n"):
            line = line.strip()
            if line and line[0] != "#":
                if line.startswith("version ") and line[8].isdigit():
                    version = "1.0"
                break
    if not txt.strip():
        return D.Document(
            SourcePosition(filename=uri, line=0, column=0, end_line=0, end_column=0),
            [],
            [],
            None,
            imported,
        )
    try:
        return _DocTransformer(uri, imported).transform(parse(txt, "document", version))
    except lark.exceptions.UnexpectedCharacters as exn:
        raise Err.ParserError(uri if uri != "" else "(in buffer)") from exn
    except lark.exceptions.UnexpectedToken as exn:
        raise Err.ParserError(uri if uri != "" else "(in buffer)") from exn
Exemplo n.º 2
0
def parse_expr(txt: str, version: Optional[str] = None) -> E.Base:
    try:
        return _ExprTransformer(txt).transform(parse(txt, "expr", version))
    except lark.exceptions.UnexpectedToken as exn:
        raise Err.ParserError(txt) from exn