Не удалось найти спецификацию языка, это в основном исходный код Nix? README репозитория относится к руководству по Nix, но кажется неполным. Например, 4.2. Идентификаторы в Nix Pills упоминают, что можно использовать тире (-), а в руководстве даже не упоминается синтаксис идентификатора.
Каков синтаксис действительного идентификатора на языке Nix?
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
Связанная грамматическая справка относится к 2009 году и больше не действует. Просто попробовал новую установку Nix (2.2.2) на Ubuntu 19.04, пример в 6.6 .1. Построить среду, но заменить
myPackages
на my-packages
- без проблем. В любом случае спасибо за то, что вникнули в него.
- person toraritte; 23.05.2019
Обновлено со ссылкой на
lexer.l
, который, как я полагаю, на самом деле используется для сборки Nix :)
- person chepner; 23.05.2019
Еще раз спасибо, особенно за ссылку!
- person toraritte; 23.05.2019