gpt4 book ai didi

java - 静态 Java 命令行解析器的生成器

转载 作者:行者123 更新时间:2023-12-01 15:04:52 25 4
gpt4 key购买 nike

我正在尝试为 Java 程序的命令行参数创建一个解析器,以免重新发明轮子。我尝试寻找一个可以为我生成类似内容的生成器,我发现人们建议使用 CLI 和 JSAP,它们看起来像是很棒的工具,但它们在运行时创建对象,我需要我的解析是静态的,以免不必要的功能(和内存)使代码困惑,所以我真正寻找的是命令行解析器生成器,在那个线程中我找到了 XTC、Rats 和 JavaCC,但它们看起来需要大量工作,而且我认为我需要的更简单。

最后我决定使用 JavaCC 来制作我的解析器,这个问题只是为了确保没有人知道更简单的方法......

谢谢

编辑:JavaCC 线程是一个无用的东西,因为它逐个字符地工作,并不真正适合命令行解析

最佳答案

这个related SO question对于命令行解析器库有许多有用的建议。我想重点讨论为什么经典的解析器生成器不是解决问题的好方法。

有两个根本原因:

  1. 命令行语法需要简单、易于内存、与一般风格/约定中的其他命令行语法一致,并且语法噪音最少。传统 PGS 的问题在于,每种语法都与其他语法不同,并且需要明确的解析……这往往会导致语法噪音。 (好吧,如果你遵守纪律,你可以避免这些陷阱,但是......)

    相比之下,典型参数解析器库的 API鼓励程序员使用一致的风格;例如-x--longForm 相比,选项优先,-- 表示不再有选项,依此类推。而且因为“语言”不关心歧义,所以程序员可以自由地非正式地解决这个问题(没有过多的语法)或简化语法。

  2. 解析器生成器要么生成解析树,要么要求您将代码嵌入到语法中。这些都不是命令行解析的理想选择,因为它们都会增加应用程序代码处理此问题的复杂性。

    相比之下,典型的参数解析器库创建或填充平面数据结构,这更容易处理。

<小时/>

您似乎也过度担心性能和内存使用情况:

... I need my parsing to be static as to not clutter the code with unncessary capabilities (and memory)

首先观察到这可能并不重要。与应用程序的其余部分相比,运行时对象的数量和大小很可能微不足道……以及在正常 JVM 启动期间在解析参数之前……以及之后发生的所有隐藏内容。

第二个观察结果是基于 PGS 的解决方案可能具有相当的开销。除了生成解析树(例如)之外,生成的解析器还需要初始化并保留一堆特定于语法的解析器表。当然,生成的解析器代码也往往很大。

关于java - 静态 Java 命令行解析器的生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13115055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com