Может кто-то просветить меня, почему парсер рекурсивного спуска с возвратом, который пробует продукцию и (в этом порядке), не распознает язык, образованный грамматикой .
Похоже, он разбирает только слова из языка .
Я сгенерировал такой синтаксический анализатор, используя этот ABNF Parser Generator с рабочим правилом, S = "a" S "a" / "aa"и синтаксический анализатор, например, не распознает слово aaaaaa.
Я ожидаю, что он будет использовать производство до тех пор, пока конкатенация конечных узлов дерева разбора слева не начнется с 7 a, а затем поднимется вверх по дереву разбора, выбрав вместо этого производственную пока дерево не будет выглядеть как это:
S
/ | \
a S a
/ | \
a S a
/ \
a a
aaaaaa.
aaaaaaдолжна анализировать и не делает. Но aaaaразбирает ли. Вы, очевидно, правы относительно способностей 2. Это должно быть ошибочно. разбирает только aaс S = "aa" / "a" [S] "a". Можете ли вы отследить, что делает парсер?