一种可能的解决方法是在语法定义中避免引入相互递归的非终结符,或者使用更准确的语法规则来解决循环的问题。
例如,考虑以下语法规则:
A -> B B -> C C -> A
由于这些规则存在循环依赖,生成跟随集时会导致循环问题。一种解决方法是重新设计语法规则,使其避免循环依赖。另一种解决方法是使用语法规则中的“+”和“*”操作符来表示多个可能的路径,以便可以使用更准确的规则生成跟随集。
例如,使用以下规则来重写上面的示例语法规则:
A -> B B -> C A C -> epsilon
其中epsilon表示为空或者不进行任何操作。这种语法规则不会产生循环依赖,可以成功生成跟随集。