Каков синтаксис действительного идентификатора на языке Nix?

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


nix
person toraritte    schedule 18.05.2019    source источник
comment
однако что такое nix?   -  person Victor    schedule 18.05.2019
comment
Я большой поклонник Nix, но в настоящее время это написано как запрос ссылки на сторонний ресурс и, следовательно, не по теме по своей природе (см. # 4 в некоторых вопросах, которые все еще не по теме ссылки на stackoverflow.com/help/on-topic). Гораздо лучше было бы задать узкий вопрос о конкретном поведении парсера (с полным воспроизведением, транскриптом и т. Д.), Задавая вопрос, поддерживается ли и как это поведение соответствующей спецификацией. (Действительно, у вас уже есть ответ, который останется отзывчивым и по теме при такой переформулировке).   -  person Charles Duffy    schedule 23.05.2019


Ответы (1)


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

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 сообщать синтаксически допустимый путь как неопределенную переменную.

person chepner    schedule 22.05.2019
comment
Связанная грамматическая справка относится к 2009 году и больше не действует. Просто попробовал новую установку Nix (2.2.2) на Ubuntu 19.04, пример в 6.6 .1. Построить среду, но заменить myPackages на my-packages - без проблем. В любом случае спасибо за то, что вникнули в него. - person toraritte; 23.05.2019
comment
Обновлено со ссылкой на lexer.l, который, как я полагаю, на самом деле используется для сборки Nix :) - person chepner; 23.05.2019
comment
Еще раз спасибо, особенно за ссылку! - person toraritte; 23.05.2019