看标题。对于我正在编写的一个小工具,我想介绍一种简单的布尔过滤器语言,并决定“正确地”这样做,并使用解析器生成器。在玩了一些grako之后,我发现我喜欢它,并且很快地完成了过滤器语言(这也很好:)
现在的问题是,如果我想在其他计算机上使用这个工具,或者把它给其他人,我首先必须让grako在那里可用,这有点麻烦,因为其他东西都是标准的python3东西。
我想合作打包必要的grako类是可能的,但这似乎有点混乱(许可在任何方面都会提到)。也许我忽略了一些内置的方法。
发布于 2016-03-19 15:39:36
简短的回答是No。
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的解析器是一种设计选择,目的是使解析器更小、更容易理解,这是该项目的主要目标之一(因为有许多其他方面都很好的解析器生成器,它们产生模糊的代码)。
另一种选择是将生成的解析器可以依赖于每个解析器的代码复制到每个解析器上,但这似乎有点非unpythonic的。
https://stackoverflow.com/questions/36092623
复制相似问题