我目前正在编写需要识别的语法 字符串abc,acb,bac,bca等。“abc”的所有排列。
我只是遗漏了什么,或者我是否必须编写所有可能的组合,例如: S - > abc | acb | ... 实现全面覆盖。
答案 0 :(得分:0)
基本上,您需要独立识别每种可能的顺序。没有标准BNF表示法的捷径。使用正则表达式,您可以考虑减少正则表达式的长度,但它对您没有多大帮助。 (例如,如果您想要a
,b
,c
和d
的所有组合,则可以写(ab|ba)(cd|dc)
而不是稍长{{1}但是它不会太多帮助。
对于三个或四个不太糟糕的元素,但它不会扩展。通常的解决方案是允许任何元素序列,并在结束时或在您使用时检查重复项,具体取决于您正在使用的解析器生成器的功能。