【问题标题】:What is the syntax of a valid identifier in the Nix language?Nix 语言中有效标识符的语法是什么?
【发布时间】:2019-05-18 11:15:23
【问题描述】:

在任何地方都找不到语言规范,基本上是Nix source? repo 的 README 引用了Nix manual,但似乎不完整。例如,Nix Pills 中的4.2. Identifiers 提到可以使用破折号 (-),而手册甚至从未提及标识符语法。

【问题讨论】:

  • 然而 nix 是什么?
  • 我是 Nix 的忠实粉丝,但目前这是作为请求链接到场外资源的请求,因此本质上是偏离主题的(参见“一些问题仍然是题外话”链接stackoverflow.com/help/on-topic)。更好的是关于解析器的特定行为(具有完整的复制器、转录本等)的狭隘问题,询问相关规范是否以及如何支持该行为。 (事实上​​,你已经得到了一个答案,通过这样的重新表述,它会保持响应性和主题性)。

标签: nix


【解决方案1】:

可能有更好的参考,但至少你可以查看lexer的来源,它定义了一个标识符

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

作为由 ASCII 字母、数字、_'- 组成的字符串,并以字母或 _ 开头。


(更新:这引用了一个过时的参考语法,而不是有效的语法。)

根据grammar,标识符不能包含-

  <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 将语法上有效的路径报告为未定义变量。

【讨论】:

  • 链接的语法参考是2009年的,现在已经失效了。刚刚在 Ubuntu 19.04 上尝试了全新的 Nix 安装(2.2.2)6.6.1. Build an environment 中的示例,但将myPackages 替换为my-packages - 没有问题。无论如何,感谢您深入研究。
  • 更新了指向lexer.l的链接,我认为它实际上是用来构建 Nix :)
  • 再次感谢,特别是链接!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多