语法为antlr4中的顺序不敏感命令行选项

时间:2014-07-31 22:22:07

标签: command-line antlr4

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

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

改变语法的一种蛮力方式可能是 subcommand1:' sub1' (option1 option2 | option2 option1)
子命令2:' sub2' (option3 option4 | option3 option4)

但是这并不能使它成为通用的,并且添加一个选项将需要列出6个选项的排列。
有一种简单的方法吗?

1 个答案:

答案 0 :(得分:3)

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

我的意思是这样的:

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

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