lua官方文档中使用的标记有指导/约定吗?

我阅读与编程有关的官方文档时总是有很大的困难。除非有示例,否则我通常无法理解它。我想了解在阅读文档时是否有任何约定。以来自lua手册的以下示例为例(https://www.lua.org/manual/5.1/manual.html#2.1): :

stat:: =如果exp然后块{elseif exp then block}[else block] end

第一个单词Stat定义为一个声明,"此集合包括赋值、控制结构、函数调用和变量声明"。

::=在文档中未定义,但可以通过谷歌搜索找到。

Exp已连接并解释。

块也有一个部分。

但是它们做{}和[]。他们字面上说"方括号用于索引表"就在几行前。而且它们用起波状括号来编写表。那么我应该从中推断出什么呢?{}和[]用作标记来简化查看某些组件的分隔符?还是{elseif exp then block}是一个包含这些值的表,[else block]是对表进行键值索引?如果我要编写一个确实是这样的文档,我会这样写吗?

然后我看到

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

' '定义一个字符串,但我必须假设'[]'被用作突出显示的方式,因为在前面的部分谈论方括号时,我知道将它们放在那里是不起作用的。

但是我又看到了这个:

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

同样,他们在列出代码之前谈论了分号的放置,但是整个代码行也是新解释和谈论的对象。如果是用括号编写的,为什么我要假定它没有括号?而我看到他们再次使用{}和[],但我不知道它们在引用什么,因为没有明确说明我们是否在谈论表格...它只是使用代码本身来解释是否在使用{}来谈论表格,但我们有第一组代码使用{}而不谈论表格。

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

点赞
用户734069
用户734069

正如在Lua文档开头和关于Lua语法的章节中所述,Lua以扩展BNF格式呈现其语法。

EBNF具有其自己的标点符号及其含义,例如您发现的::=。但作为语法,需要区分EBNF标点符号的含义和“该标点符号出现在由语法定义的语言中”的含义。因此,前者的含义总是被假定;而后者的含义只能通过对该标点符号进行_引用_来实现。

所以这个:

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

意味着一个prefixexp后跟一个开放方括号,然后是exp,最后是一个闭合方括号。

相比之下,这个:

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

意味着Name后面跟着零个或多个由.跟随的Name子序列,然后是一个可选的由:跟随的Name子序列。因为那些是{}[]在EBNF中的含义。

2019-11-01 14:32:30