跳转至

语言与解析#

nlql.lang —— NLQL 字符串前端:lark 文法 + transformer + parser,把 SQL 风格的 NLQL 语句编译到 Query IR。parse(sql) 是入口。

lang #

NLQL string front-end: grammar, transformer, and parser to Query IR.

__all__ module-attribute #

__all__ = ['NLQLParser', 'parse']

NLQLParser #

NLQLParser()

Parses NLQL/2 strings into :class:~nlql.ir.nodes.Query IR.

源代码位于: src/nlql/lang/parser.py
def __init__(self) -> None:
    grammar = _GRAMMAR_FILE.read_text(encoding="utf-8")
    self._parser = Lark(grammar, parser="lalr", start="start", propagate_positions=True)
    self._transformer = NLQLTransformer()

parse #

parse(query: str) -> Query

Parse a query string into resolved Query IR.

引发:

类型 描述
NLQLParseError

on any syntax or transform error.

源代码位于: src/nlql/lang/parser.py
def parse(self, query: str) -> Query:
    """Parse a query string into resolved Query IR.

    Raises:
        NLQLParseError: on any syntax or transform error.
    """
    try:
        tree = self._parser.parse(query)
        result: Query = self._transformer.transform(tree)
    except VisitError as e:
        if isinstance(e.orig_exc, NLQLError):
            raise e.orig_exc from e
        raise NLQLParseError(f"parse error: {e}") from e
    except UnexpectedInput as e:
        self._raise_parse_error(e, query)
    except LarkError as e:
        raise NLQLParseError(f"parse error: {e}") from e
    return _resolve_query(result)

parse #

parse(query: str) -> Query

Parse an NLQL/2 string into Query IR using a shared parser instance.

源代码位于: src/nlql/lang/parser.py
def parse(query: str) -> Query:
    """Parse an NLQL/2 string into Query IR using a shared parser instance."""
    return _default_parser().parse(query)