lua 官方文档中使用的标记是否有 guide/convention?

Is there a guide/convention to the markup being used in the lua official documentation?

我一直很难阅读与编码相关的官方文档。除非它与示例配对,否则我通常不理解它。我正在寻求澄清在阅读文档时采用了什么样的约定(如果有的话)。以 lua 手册 (https://www.lua.org/manual/5.1/manual.html#2.1) 中的以下示例为例 :

stat ::= if exp then block {elseif exp then block} [else block] end

第一个词 Stat 被定义为语句,"this set includes assignments, control structures, function calls, and variable declarations."

::= 文档中没有定义,谢天谢地可以用谷歌搜索。

Exp已链接并解释。

块也有一个部分。

但随后他们会执行 {} 和 []。他们在上面的几行字面上写着 "Square brackets are used to index a table" 。那个波浪形的括号是用来写 table 的。那么我应该从中推断出什么呢? {} 和 [] 用于将单独的部分表示为标记,以便更容易查看某些组件?或者 {elseif exp then block} 是一个 table,其内部包含这些值,而 [else block] 是一个键值索引 table?如果我正在写一个确实如此的文档,我不会这样写吗?

然后我看到

var ::= prefixexp `[´ exp `]´`

' ' 定义了一个字符串,但我必须假设 '[' ']' 被用来强调这样一个事实,因为他们在上一节中谈论的是方括号的作用只是突出他们的位置,这不应该包含在代码中。我只知道做这个假设,因为我知道当你把它们放在那里时它不起作用。

但后来我看到了这个:

chunk ::= {stat [`;´]}

同样,他们正在讨论在列出该代码之前分号的位置,但是整个代码行也是新解释和讨论的。如果它是用括号写的,为什么我会假设它是在没有括号的情况下写的?我看到他们再次使用 {} 和 [],我不知道他们在引用什么,因为它没有明确说明我们正在谈论 table...它只是使用代码本身来解释无论它是在谈论 table 还是与 {} 无关,但我们有第一组代码,其中使用了 {} 而不是在谈论 table.

使用的约定是什么?通过在第一行代码中使用 {} 和 [],他们实际上 do/show 想要做什么?

如上所述 at the beginning of the Lua documentation and in the section on the Lua grammar, Lua presents its grammar in extended BNF 格式。

EBNF 有自己的标点符号和自己的含义,就像您发现的 ::= 一样。但是作为文法,需要区分一段标点符号的EBNF含义和"this punctuation appears in the language defined by the grammar"。因此,总是采用前一种含义;后一个意思只能通过引用标点符号来实现。

所以这个:

var ::= prefixexp `[´ exp `]´`

表示 prefixexp 后跟一个左括号然后 exp 后跟一个右括号。

相比之下,这个:

funcname ::= Name {`.´ Name} [`:´ Name]

表示Name后跟[=​​16=]的零个或多个子序列后跟Name,后跟:的可选子序列后跟Name。因为这就是 {}[] 对 EBNF 的意义。