Формулировка POSIX относительно грамматики оболочки

Вопрос или проблема

Эта страница, описывающая грамматику оболочки, содержит следующий абзац в разделе “Правила грамматики оболочки”:

  1. [Имя команды]

Когда ТОКЕН точно является зарезервированным словом, будет возвращен идентификатор токена для этого зарезервированного слова. В противном случае будет возвращен токен СЛОВО. Также, если парсер находится в любом состоянии, где только зарезервированное слово может быть следующим правильным токеном, действуйте по аналогии. Это правило применяется довольно узко: когда составной список заканчивается явным разделителем (например, закрывающим fi внутреннего if_clause), то оно применяется; там, где составной список может продолжаться (как, например, после ;), будет применяться правило 7a (и, следовательно, первое предложение этого правила). Во многих случаях два условия идентичны, но эта часть правила не дает разрешение рассматривать СЛОВО как зарезервированное слово, если оно не находится в месте, где должно появиться зарезервированное слово.

В выделенной части (т.е. “Во многих случаях два условия идентичны”) что подразумевается под “двумя условиями”? Каковы случаи, когда они “идентичны”, и какие примеры, когда они не “идентичны”?

Я думаю, что понимаю смысл этого абзаца (в сочетании с правилом 7a ниже): парсер “создаст” токен ЗАРЕЗЕРВИРОВАННОЕ СЛОВО, если либо:

  • парсер находится в состоянии, где ожидает новую команду, и следующий ТОКЕН “точно является ЗАРЕЗЕРВИРОВАННЫМ СЛОВОМ”, или
  • парсер находится в состоянии, где должен появиться токен ЗАРЕЗЕРВИРОВАННОЕ СЛОВО (если парсер не допустит этого, возникнет ошибка парсера)

Что я не понимаю, так это точная формулировка автора. Если я не ошибаюсь, первые два предложения приведенного абзаца применяются, когда парсер находится в состоянии, где ожидает новую команду. Третье предложение применяется, когда парсер находится в состоянии, которое требует появления токена ЗАРЕЗЕРВИРОВАННОЕ СЛОВО.

Я был бы очень признателен, если бы кто-то мог объяснить, что автор имел в виду, используя приведенную формулировку. Спасибо!

Ответ или решение

Вопрос, который вы подняли относительно формулировки POSIX по грамматике оболочки, требует детального анализа. Давайте разберем основные аспекты, касающиеся двух условий, о которых идет речь в тексте.

Определение условий

По всей видимости, в тексте под «двумя условиями» подразумеваются следующие моменты:

  1. Первое условие: Парсер находится в состоянии, ожидающем новый командный токен, и текущий токен точно соответствует зарезервированному слову.
  2. Второе условие: Парсер находится в состоянии, где обязательным следующим токеном должно быть зарезервированное слово, что предотвращает обработку значений, не соответствующих этому условию.

Идентичные условия

Когда автор утверждает, что "в многих случаях два условия идентичны", он имеет в виду, что в некоторых сценариях парсер может находиться в состоянии, требующем как новую команду (где может быть токен "запрос"), так и ситуацию, в которой требуется токен в виде зарезервированного слова. В этих случаях фактически оба условия приводят к одинаковому выводу.

Пример идентичных условий:

  • В случае, когда парсер ожидает if условие, и следующим токеном будет if, где это "if" является зарезервированным словом.

Неидентичные условия

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

Пример неидентичных условий:

  • После конструкции, такой как ;, может следовать любой токен, включая слово, которое могло бы рассматриваться как зарезервированное, но не обязательно таковым является в данном контексте.

Заключение

Таким образом, важно понимать, что наличие идентичных условий не означает универсальности. Позиция парсера и контекст, в которых эти токены размещаются, играют ключевую роль в том, как будут интерпретироваться вводимые токены. Ваша интерпретация условий вполне корректна и соответствует объему возможных реализаций этой грамматики в контексте POSIX.

Если у вас остаются еще вопросы по этой теме или необходима дополнительная информация, не стесняйтесь обращаться для более глубокого анализа грамматики оболочки POSIX.

Оцените материал
Добавить комментарий

Капча загружается...