Двухуровневая грамматика
Я пытаюсь определить, вносят ли предложенные изменения в грамматику EcmaScript двусмысленности.
Грамматика несколько странная
- Не существует регулярной или контекстно-свободной лексической грамматики, означающей, что нет способа разбить входные данные на серию токенов, которые могут быть переданы в конструктор деревьев, хотя в данном состоянии синтаксического анализатора существует контекстно-свободная грамматика, которую можно использовать для выборки следующий токен.
- Некоторые токены неявны. В частности, точки с запятой вставляются в некоторых местах, когда они отсутствуют в исходном тексте. Для этого требуется только один невоспламеняемый токен предпросмотра, но поскольку игнорируемые токены могут иметь произвольную длину, это предотвращает бесконечное упреждение.
- Нет более простого перевода, чем полный анализ, который позволяет удалить или свернуть игнорируемые токены.
- Токены ограничителей строки (и многострочные комментарии, которые эквивалентны символам конца строки) игнорируются в большинстве контекстов, но в некоторых имеют значение.
Я знаю, что доказать отсутствие двусмысленности вообще невозможно, но я бы хотел достичь более простой цели:
Тест, который является истинным тогда и только тогда, когда нет строки, такой, что два разных пути через грамматику кандидата могут создать два разных дерева, где каждый путь включает разбиение строки на менее чем k токенов.
Я был бы очень рад, если бы я мог доказать такую вещь для кандидата грамматики до k из 50.
Есть ли литература по обнаружению неоднозначности в таких пределах?