Основным ограничением грамматик PEG является то, что они вообще не имеют дело с двусмысленностью.
Безусловно, это тоже их сила, поскольку работа с неясностями является одной из самых неприятных частей использования инструмента CFG (контекстно-свободной грамматики).
С PEG вы имеете дело с неоднозначностью, упорядочивая правило, которому хотите соответствовать, перед другим правилом, которое будет соответствовать неоднозначно, но которое вам не нужно.
Проблема в том, что вы не всегда знаете даже о некоторых или даже любых неясностях в языке или грамматике и генераторах PEG, по крайней мере тех, которые я пробовал, не анализируйте грамматику на предмет неоднозначности помочь вам найти их, а затем разработать и упорядочить правила, чтобы правильно с ними справиться.
Генераторы парсеров CFG, такие как yacc и bison, анализируют вашу грамматику и сообщают обо всех двусмысленностях. К сожалению, они часто сообщают о них довольно загадочно, что может быть трудно понять. И, конечно, часто трудно исправить грамматику, чтобы справиться с ними. Но, по крайней мере, вы будете знать, что они существуют.
С грамматикой PEG вы можете быть блаженно неосведомлены о неясностях в вашей концептуальной грамматике, потому что как только вы сделаете ее PEG, у нее больше не будет двусмысленности, у нее просто будут соответствующие правила и, возможно, бездействующие правила, которые также будут соответствовать, если они имели более высокий приоритет. Они могут не отображаться в вашем тестировании, но могут появиться после выпуска.
С грамматиками CFG вы вынуждены иметь дело с неясностями во время разработки, но это будет нелегко.
Если я не проясню, вот шестилетняя дискуссия Джошуа Хабермана о блоге по языку программирования Lambda the Ultimate : PEGs и Packrat Разбор не является ответом .