看到标题。对于我正在写的一个小工具,我想介绍一种简单的布尔过滤器语言,并决定“正确”地使用解析器生成器。在玩过grako之后,我发现我喜欢它,并且相当快地完成了过滤语言(这也很不错:))

现在的问题是,如果我想在其他计算机上使用该工具或将该工具提供给其他人,我首先必须以某种方式使grako可用,这有点麻烦,因为其他所有东西都是标准的python3东西。

我想可以通过共同包装必要的grako类来实现,但这似乎有些混乱(许可将以任何方式提及)。也许我忽略了一些内置方法。

最佳答案

最简洁的答案是不。

Grako生成的解析器确实需要grako库。

例如:

with self._group():
    with self._choice():
        with self._option():
            self._token('nameguard')
        with self._option():
            self._token('ignorecase')
        with self._option():
            self._token('left_recursion')
        self._error('expecting one of: ignorecase left_recursion nameguard')


所有self._xyz()来自grako.contexts.ParseContextgrako.parsing.Parser。回溯,缓存和簿记都隐藏在上下文管理器和装饰器的后面。

生成依赖于grako的解析器是一种设计选择,旨在使解析器更小,更易于理解,这是该项目的主要目标之一(因为还有许多其他伟大的解析器生成器会产生混淆的代码)。

另一个选择是将生成的解析器可能依赖的代码复制到每个解析器上,但这似乎有点不合逻辑。

关于python - 是否可以在没有grako的情况下使用带有grako生成的解析器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36092623/

10-12 01:20