看到标题。对于我正在写的一个小工具,我想介绍一种简单的布尔过滤器语言,并决定“正确”地使用解析器生成器。在玩过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.ParseContext
或grako.parsing.Parser
。回溯,缓存和簿记都隐藏在上下文管理器和装饰器的后面。生成依赖于
grako
的解析器是一种设计选择,旨在使解析器更小,更易于理解,这是该项目的主要目标之一(因为还有许多其他伟大的解析器生成器会产生混淆的代码)。另一个选择是将生成的解析器可能依赖的代码复制到每个解析器上,但这似乎有点不合逻辑。
关于python - 是否可以在没有grako的情况下使用带有grako生成的解析器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36092623/