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 的意义。
我一直很难阅读与编码相关的官方文档。除非它与示例配对,否则我通常不理解它。我正在寻求澄清在阅读文档时采用了什么样的约定(如果有的话)。以 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 的意义。