我已经使用队列实现了Earley 解析器来处理状态。队列以顶级规则为种子。对于队列中的每个状态,通过向队列中添加新状态来执行其中一个操作(预测、扫描、完成)。不添加重复状态。
我遇到的问题最好用以下语法描述:
解析A
时,会发生以下情况:
如您所知,A
不会完全解决。这是因为具有 epsilon 状态的完成只会发生一次,因为它没有添加到队列中。
如何调整我的算法以支持这些 epsilon 状态?
编辑:请注意,使用终端时这不是问题,因为将创建新图表集以插入扫描状态。由于该状态在那里尚不存在,因此将对其进行处理。