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

问题描述 投票:1回答:1

与编码相关的官方文档,我一直很难阅读。我通常不理解它,除非将其与示例配对使用。我正在寻求澄清在阅读文档(如果有)时采用哪种约定的方式。请从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 [`;´]}

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

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

lua code-documentation
1个回答
2
投票

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

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

所以这个:

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

表示prefixexp,后跟一个中括号,然后是exp,后跟一个中括号。

相比之下,这:

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

意味着Name,然后是.的零个或多个子序列,然后是Name,然后是:的可选子序列,然后是Name。因为这些是{}[]对EBNF的含义。

© www.soinside.com 2019 - 2024. All rights reserved.