我正在用 python 编写一个 CLI 应用程序,它是通过一种相当复杂的命令行语言来使用的。这个想法与可以说具有相同属性的 find(1) 非常相似。
目前,解析器完全是使用手工制作的 EBNF 描述语言手写的。问题是这种语言使用起来非常尴尬,因为我必须将所有东西都写成 python 结构。我也觉得我的程序由于解析的原因仍然过于臃肿。
是否有任何具有易用性和用于命令行解析的真实描述语言(输入为字符串/文档)的库?从语法树中,我想直接将每个项目映射到一个类实例。自然,我不想要标记器,或者至少标记器必须直接从命令行参数映射到标记。
感谢所有建议!
更新:我的程序的重点是生成对象并将它们通过任意数量的过滤器(可能是不纯/有效的操作),这些过滤器可能会或可能不会再次输出对象,甚至可能输出另一种类型的对象。总体思路显然是从 find(1) 中收集到的。一个示例命令行是:
~/picdb.py -sqlselect 'select * from pics where dirname like "testdir%"' -tagged JoSo -updateFromFile [ -resx +300 -or -resX +200 -resY +500 ] -printfXml '<jpegfile><src>%fp</src><DateTimeOriginal>%ed</DateTimeOriginal><Manufacturer>%eM</Manufacturer><Model>%em</Model></jpegfile>%NL'