【问题标题】:Grammar for order insensitive command line options in antlr4antlr4 中对顺序不敏感的命令行选项的语法
【发布时间】:2014-08-01 06:27:37
【问题描述】:

我正在使用 Antlr4 进行命令行解析。
我的语法格式是
命令:子命令1 |子命令2
子命令 1:“子 1”选项 1 选项 2
subcommand2: 'sub2' option3 option4
option1:'-option1' ID
选项 2:'-选项 2' ID
option3 : '-option3' ID
option4 : '-option4' ID
编号:[a-zA-Z0-9]+

我希望每个子命令的选项不区分顺序
例如,子命令 -option1 ABC -option2 PQR 应被视为有效输入
以及子命令 -option2 PQR -option1 ABC 也应该被视为有效输入

改变语法的一种蛮力方法可能是
子命令 1:'sub1'(选项 1 选项 2 | 选项 2 选项 1)
subcommand2: 'sub2' (option3 option4 | option3 option4)

但这并不能使其具有通用性,并且再添加一个选项将需要列出 6 个选项排列。
有没有简单的方法?

【问题讨论】:

标签: command-line antlr4


【解决方案1】:

你应该使你的语法通用。不要在语法中硬编码选项名称,而是生成一个通用词法分析器,然后在您的应用程序中解释选项名称。

我的意思是这样的:

grammar CommandLine;
command: ID option*;
option: OPTION ID;
OPTION: '-' ID;
ID : [a-zA-Z0-9]+;

然后使用代码提取选项名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2014-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多