Каков синтаксис действительного идентификатора в языке Nix? - PullRequest
0 голосов
/ 18 мая 2019

Не удалось найти спецификацию языка где-либо, это в основном исходный код Nix ?README репо ссылается на руководство Nix , но оно кажется неполным.Например, 4.2.Идентификаторы в Nix Pills упоминают, что можно использовать тире (-), а в руководстве даже не упоминается синтаксис идентификатора.

1 Ответ

2 голосов
/ 23 мая 2019

Могут быть и лучшие ссылки, но по крайней мере вы можете проверить источник лексера , который определяет идентификатор

ID          [a-zA-Z\_][a-zA-Z0-9\_\'\-]*

как строка, состоящая из букв ASCII, чисел, _, ' или - и начинающаяся либо с буквы, либо с _.


(Обновление: это ссылка на устаревшую справочную грамматику, а не на рабочую грамматику.)

Согласно грамматике идентификатор не может содержать -:

  <production id="nix.id">
    <lhs>Id</lhs>
    <rhs>[a-zA-Z\_][a-zA-Z0-9\_\']*</rhs>
  </production>

но путь может:

  <production id="nix.path">
    <lhs>Path</lhs>
    <rhs>[a-zA-Z0-9\.\_\-\+]*(\/[a-zA-Z0-9\.\_\-\+]+)+</rhs>
  </production>

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

...