Двухуровневая грамматика

Я пытаюсь определить, вносят ли предложенные изменения в грамматику EcmaScript двусмысленности.

Грамматика несколько странная

  1. Не существует регулярной или контекстно-свободной лексической грамматики, означающей, что нет способа разбить входные данные на серию токенов, которые могут быть переданы в конструктор деревьев, хотя в данном состоянии синтаксического анализатора существует контекстно-свободная грамматика, которую можно использовать для выборки следующий токен.
  2. Некоторые токены неявны. В частности, точки с запятой вставляются в некоторых местах, когда они отсутствуют в исходном тексте. Для этого требуется только один невоспламеняемый токен предпросмотра, но поскольку игнорируемые токены могут иметь произвольную длину, это предотвращает бесконечное упреждение.
  3. Нет более простого перевода, чем полный анализ, который позволяет удалить или свернуть игнорируемые токены.
  4. Токены ограничителей строки (и многострочные комментарии, которые эквивалентны символам конца строки) игнорируются в большинстве контекстов, но в некоторых имеют значение.

Я знаю, что доказать отсутствие двусмысленности вообще невозможно, но я бы хотел достичь более простой цели:

Тест, который является истинным тогда и только тогда, когда нет строки, такой, что два разных пути через грамматику кандидата могут создать два разных дерева, где каждый путь включает разбиение строки на менее чем k токенов.

Я был бы очень рад, если бы я мог доказать такую ​​вещь для кандидата грамматики до k из 50.

Есть ли литература по обнаружению неоднозначности в таких пределах?

0 ответов

Другие вопросы по тегам