Есть ли какая-нибудь официальная терминология в отношении чего-то вроде грамматики двойных кавычек?

cs.stackexchange https://cs.stackexchange.com/questions/128538

Вопрос

Во многих языках программирования строка является токеном.

Например:

 token               ::= '"' string
                       | digit nat

 string              ::= char string
                       | '"'

 nat                 ::= digit nat
                       | ϵ

Это LL(1)-грамматика для токе-грамматики некоторого языка программирования.

При разборе string, нет необходимости проверять следующий набор, поскольку существует " в конце каждого string.

Сравнивая с nat, string его легче разобрать.

Мой вопрос

Существует ли какая-либо официальная терминология по этому виду грамматики?

Спасибо.


Редактирование:

В исходной грамматике была какая-то ошибка, спасибо @rici за указание на мои ошибки.

Это было полезно?

Решение

Наборы FOLLLOW не используются при анализе ни одного из них. string или nat.В обоих случаях анализатору просто нужно определить, входят ли входные данные в набор допустимых символов.В случае nat, допустимыми символами являются цифры;в случае string, это символы, отличные от ".(В реальных языках синтаксический анализатор также будет проверять \).Но в обоих случаях проверка необходима, и не существует хорошего критерия, позволяющего сказать, что один тест «проще» другого.(На практике обе проверки, скорее всего, будут простым поиском по таблице.Итак, они O(1).)

Наборы FOLLOW необходимы только в том случае, если грамматика содержит ε произведений.Даже тогда действия парсера не сложны.Более сложным является создание синтаксического анализатора, что происходит только один раз.На самом деле это не так уж и важно, но достаточно примечательно, что «грамматики без ε» существуют.Я не думаю, что существует какой-то общий словарь для описания разницы между явно и неявно завершающимся повторением, и в любом случае это различие будет очень сложно определить строго.Твой string будет анализироваться парсером, который использует другое правило для сбора завершающих ", и вполне возможно, что оба парсера в конечном итоге будут иметь одну и ту же реализацию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с cs.stackexchange
scroll top