lua官方文档中使用的标记是否有指南/约定?

时间:2019-11-01 11:00:32

标签: lua code-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被定义为一条语句,并且“该集合包括赋值,控制结构,函数调用和变量声明”。

:: =未在文档中定义,值得庆幸的是,可以在Google上对其进行搜索。

Exp已链接并说明。

块也有一个部分。

但是随后它们执行{}和[]。他们从字面上说:“方括号用于索引表”仅在上面几行。那个曲折的括号是用来写表格的。那么我应该从中得出什么呢?使用{}和[]来表示单独的部分作为标记,以使其更易于查看某些组件?还是说{elseif exp then block}是一个在其内部包含这些值的表,而[else block]是索引该表的键值?如果我确实在写文档,那我会不会这样写吗?

然后我看到

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

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

但是我看到了:

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

类似地,他们在列出该代码之前是在谈论分号的位置,但是整个代码行也得到了新的解释和讨论。如果用括号括起来,我为什么要假定它没有括号呢?而且我看到他们再次使用{}和[],我也不知道他们在引用什么,因为它没有明确说明我们在谈论一个表...它只是使用代码本身来解释其是否在谈论是否使用{}创建一个表,但我们拥有使用{}并且不谈论表的第一组代码。

正在使用什么约定?他们在第一行代码中实际上使用{}和[]试图做什么/显示什么?

1 个答案:

答案 0 :(得分:2)

at the beginning of the Lua documentationin the section on the Lua grammar所述,Lua以extended BNF格式表示其语法。

EBNF具有自己的标点符号,具有自己的含义,就像您发现的::=一样。但是作为一种语法,需要在标点符号的EBNF含义和“这种标点出现在语法定义的语言中”之间进行区分。因此始终假定前者的含义;后者的含义只能通过引用标点符号来实现。

所以这个:

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

表示prefixexp,后跟方括号,接着是exp,后跟方括号。

通过对比,

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

意味着Name,然后是.的零个或多个子序列,然后是Name,然后是:的可选子序列,然后是{{1} }。因为Name{}对EBNF意味着什么。

相关问题