我想匹配这些可能的标志:[-ASC|-BIN] [-REC] [-DEL]
它们都是可选的,但是对于-ASC
和-BIN
标志,它们是xor的,只能使用其中一个,不能同时使用。
这是我处理标志的语法:(GET_OPTION_ASC | GET_OPTION_BIN) | GET_OPTION_REC | GET_OPTION_DEL | SPACES;
ASC和BIN不能同时出现的规则不是一个语法决定,而是一个语义决定。解析器只能执行语法任务。
通常,在对与语法无关的各种其他任务进行解析之后,会有一个语义阶段。这是其中之一。您应该检查构建的解析树,并报告所有语义错误(如重复的变量名,上面提到的错误等)。