Может кто-то просветить меня, почему парсер рекурсивного спуска с возвратом, который пробует продукцию и (в этом порядке), не распознает язык, образованный грамматикой .
Похоже, он разбирает только слова из языка .
Я сгенерировал такой синтаксический анализатор, используя этот 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"
. Можете ли вы отследить, что делает парсер?