I have implemented the Earley parser using a queue to process states. The queue is seeded with the top-level rule. For each state in the queue, one of the operations (prediction, scanning, completion) is performed by adding new states to the queue. Duplicate states are not added.
The problem I am having is best described with the following grammar:
When parsing A
, the following happens:
As you can tell, A
will not be fully resolved. This is because the completion with the epsilon state will only happen once as it is not added to the queue.
How can I adapt my algorithm to support these epsilon-states?
Edit: Note that this is not an issue when using terminals as a new chart set will be created to insert the scanned state. As the state does not exist there already, it will be processed.