Позитивный прогноз пытается сопоставить заданный вход и успешно, если совпадение успешно, но он никогда не потребляет вход. Он предназначен для использования в качестве части последовательности для продолжения сопоставления последующих элементов последовательности только , если можно сопоставить выражение, заданное для lookahead. Сам по себе он не очень полезен.
В правиле Sentence: 'foo' 'bar' ( '.' | &'end' );
упорядоченный выбор в конце будет пытаться найти совпадение .
, и после этого упреждения end
будет успешным, но в этой последовательности ничего не будет найдено, совпадение пустое и эта ветвь упорядоченного выбор не удался. Чтобы преодолеть проблему, вы можете изменить правило так:
Sentence: 'foo' 'bar' ( '.' | &'end' '');
Теперь у вас есть явное совпадение пустой строки после предпросмотра, которое предоставляет результат альтернативы упорядоченного выбора.