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
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