Могут быть и лучшие ссылки, но по крайней мере вы можете проверить источник лексера , который определяет идентификатор
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 сообщать синтаксически правильный путь как неопределенную переменную.