2

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

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

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

4

1 回答 1

1

简短的回答是否

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。

于 2016-03-19T15:39:36.873 回答