接下来会循环冲突栈中的元素. 2.1 首先弹出栈顶元素 c 。 2.2 回滚词元链,就是删除上一次option中与 c 中词元有交差的尾部(bachPath方法中是循环方法,会直到删除没有交叉词元的时候,才停止删除)。 2.3 然后再次执行forwardPath方法,生成可选的方案。(就是以 c 元素为起始,遍历c的词元和c的下一个词元,再下一个词元,直到结束,将没有冲突的词元添加到option中,此次方法中生成的冲突栈,并没有被获取,不再使用) 2.4 将生成的 option 词元链,拷贝一份加入到 pathOptions中 2.5 循环此步骤,直到冲突栈lexemeStack中没有元素为止。
//存在歧义词,处理
QuickSortSet.Cell c =null;while(!lexemeStack.isEmpty()){
c = lexemeStack.pop();//回滚词元链this.backPath(c.getLexeme(), option);//从歧义词位置开始,递归,生成可选方案this.forwardPath(c, option);
pathOptions.add(option.copy());}