静态Java命令行解析器生成器
我试图为Java程序的命令行参数制作一个解析器,为了不重新发明轮子,我试图寻找一个生成器,为我生成类似的东西,我发现有人建议使用CLI和JSAP,它们看起来像是很棒的工具,但它们在运行时创建对象,我需要我的解析是静态的,这样就不会用不必要的功能(和内存)把代码弄得乱七八糟,所以我真正想要的是一个命令行解析器生成器,在这个线程中我找到了XTC、Rats和JavaCC,但它们似乎需要大量的工作,我认为我需要的是更简单的 最后,我决定使用JavaCC制作解析器,这个问题只是为了确保没有人知道更简单的方法 谢谢 编辑:JavaCC线程是无用的,因为它可以逐个字符地工作,不太适合命令行解析这对命令行解析器库有很多有用的建议。我想重点讨论为什么经典解析器生成器不是解决问题的好方法 有两个根本原因:静态Java命令行解析器生成器,java,parsing,parser-generator,Java,Parsing,Parser Generator,我试图为Java程序的命令行参数制作一个解析器,为了不重新发明轮子,我试图寻找一个生成器,为我生成类似的东西,我发现有人建议使用CLI和JSAP,它们看起来像是很棒的工具,但它们在运行时创建对象,我需要我的解析是静态的,这样就不会用不必要的功能(和内存)把代码弄得乱七八糟,所以我真正想要的是一个命令行解析器生成器,在这个线程中我找到了XTC、Rats和JavaCC,但它们似乎需要大量的工作,我认为我需要的是更简单的 最后,我决定使用JavaCC制作解析器,这个问题只是为了确保没有人知道更简单的方
-x
与-longForm
相比,选项优先,--
意味着没有更多选项,依此类推。由于“语言”不关心歧义,程序员可以随意地对其进行非正式分类(不需要过多的语法)或简化语法
您似乎还过度担心性能和内存使用: 。。。我需要我的解析是静态的,这样就不会用不必要的功能(和内存)把代码弄得乱七八糟 第一个观察结果是,这可能并不重要。与应用程序的其余部分相比,运行时对象的数量和大小很可能微不足道。。。在解析参数之前,在正常JVM启动期间发生的所有隐藏内容。。。然后呢
第二个观察结果是,基于PGS的解决方案可能具有类似的开销。除了生成解析树(例如),生成的解析器还需要初始化和保留一组特定于语法的解析器表。当然,生成的解析器代码也往往很大。链接问题答案的可能重复有许多命令行解析器库等示例。恐怕您正在进行过早优化,这是万恶之源。因为命令行解析器只工作一次,所以它在运行时创建对象的事实并不重要。想想JVM本身,它在启动时创建了多少个对象。我意识到基于PGS的解决方案也不是很好,因为代码生成器等待输入流,并且经常逐个字符地工作,java参数实际上是以字符串数组的形式传递的,我将分析一个解析器,我自己编写了几个参数,看看它的性能是否与字符串数组相当CLI@MysticOdin-我想你还没有“理解”我和阿列克谢的观点。如果您的解析器需要0.01秒,而CLI需要0.1秒,那么这仍然无关紧要。您需要决定1)在整个应用程序运行时的上下文中,以及2)在应用程序的实际性能需求上下文中。在没有人会注意到差异的情况下,花上几天时间优化命令行解析将是巨大的时间浪费。我确实理解了你和Alexei的观点,特别是“过早优化”的事情,因为这只在启动时进行,而且JVM可能会带来很多开销,你关于典型程序运行时的观点也在我的脑海中,我还需要比较检测参数错误所需的时间,因为对于我的案例来说,这是一个关键问题,也是可执行jar的大小,我只想把这个问题一直讨论到最后,以获得支持我决定的具体数据,非常感谢你的关注