На этой странице wikipedia:
Основное различие между контекстно-свободные грамматики и разбор грамматика выражений состоит в том, что PEG оператор выбора. Если первая альтернатива преуспевает, вторая альтернатива игнорируется. Таким образом, выбор не является коммутативным, в отличие от неупорядоченный выбор, как в контекстно-свободном грамматики и регулярные выражения. Упорядоченный выбор аналогичен мягкому разрешенные операторы, доступные в некоторой логике языков программирования.
Почему оператор выбора PEG замыкает соединение? Это связано с тем, что для минимизации использования памяти (из-за memoization)?
Я не уверен, что оператор выбора в регулярных выражениях, но предположим, что он таков: /[aeiou]/
для соответствия гласной. Поэтому это регулярное выражение является коммутативным, потому что я мог бы написать его в любом из 5! (пять факториальных) перестановок символов гласных? т.е. /[aeiou]/
ведет себя так же, как /[eiaou]/
. В чем преимущество его коммутативности? (c.f. PEG-некоммутативность)
Следствием этого является то, что если CFG транслитерируется непосредственно в ПЭГ, любой двусмысленность в первом разрешается детерминистически выбирающий один синтаксический анализ дерево из возможных анализов. От тщательно выбирая порядок, в котором альтернативы грамматики указанный, у программиста отличный контроль над деревом разбора.
Говорят ли, что грамматика ПЭГ превосходит CFG?