Command line antlr4中不区分顺序的命令行选项的语法

Command line antlr4中不区分顺序的命令行选项的语法,command-line,antlr4,Command Line,Antlr4,我正在使用Antlr4进行命令行解析。 我的语法格式是 命令:子命令1 |子命令2 子命令1:“sub1”选项1选项2 子命令2:“sub2”选项3选项4 选项1:'-option1'ID 选项2:'-option2'ID 选项3:'-option3'ID 选项4:'-option4'ID 识别号:[a-zA-Z0-9]+ 我希望每个子命令的选项不区分顺序 例如,子命令-选项1 ABC-选项2 PQR应视为有效输入 以及子命令-option2 PQR-option1 ABC也应视为有效输入 一种

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

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

一种强力改变语法的方法可能是
子命令1:'sub1'(选项1选项2 |选项2选项1)
子命令2:'sub2'(选项3选项4 |选项3选项4)

但这并不意味着它是通用的,再添加一个选项需要列出6种选项排列。

有什么简单的方法吗?

你应该让你的语法更通用。不要硬编码语法中的选项名称,而是生成一个通用的lexer,然后在应用程序中解释选项名称

我的意思是这样的:

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

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

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

我的意思是这样的:

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

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

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

我的意思是这样的:

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

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

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

我的意思是这样的:

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

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

另请参见Jim在google groups上的回答:另请参见Jim在google groups上的回答:另请参见Jim在google groups上的回答:另请参见Jim在google groups上的回答: