Skip to main content

Basic Syntax(基本语法)

Basic Syntax(基本语法)

File Structure(文件结构)

ProtoGraph 文件采用 UTF-8 编码,扩展名为 .pg。每个文件定义了一个单独的模块。

模块包含头部(header)和主体(body)。头部包括模块名称以及以下各项中的零个或多个:

  • inputs:模块将使用的输入(如源)
  • outputs:模块产生的输出(如驱动)
  • global definitions:对 Froox Engine 实体的全局引用
  • uses:模块在主体中使用的其他模块

主体从 where 关键字之后开始,包含一个将被编译为节点的表达式(expression)。多个表达式需要包含在上下文表达式({...})中,并用分号分隔。

模块还可以在头部之前的行中包含指令(directives),用于向编译器提供指示。这些行以 # 开头。

以下是一个包含上述部分内容的示例模块:

module BasicModule
in InputX: int

out Output2X: int

where {
_intermediate = InputX + 5;
Output2X = InputX + _intermediate;
}

Whitespace(空白字符)

模块头部中的空白字符是重要的。头部的每个部分必须单独占一行。主体中的空白字符不重要。需要使用明确的开/闭符号和分隔符来分组和分隔表达式。

Comments(注释)

// 表示注释的开始。该行的其余部分将不会被编译器解析为 ProtoGraph 代码。注释可用于代码文档。使用 /// 在 let 绑定上方编写的特殊文档注释可用于在生成的 ProtoFlux 中生成注释(取决于打包格式)。

Keywords(关键字)

ProtoGraph 关键字全部以小写字母开头,例如 modulewhereletuse。这些关键字指定了语言中的语义。有关完整的关键字列表,请参阅关键字参考。

Names(名称)

节点、模块和包的名称使用帕斯卡命名法(首字母大写,每个单词首字母大写),可以包含字母、数字和下划线。名称可以以大写字母或下划线开头。当引用子目录中的名称时,使用 / 分隔路径各部分,例如 Collections/List/NewList

Grouping and Delimiters(分组与分隔符)

有三种不同的分组符号,每种都有对应的分隔符:

  • ():用于显式指定运算顺序以及指定节点的参数。指定参数时,参数之间用逗号分隔。
  • {}:用于将一系列表达式组合在特定上下文中。表达式之间用分号分隔。
  • []:用于创建列表。元素之间用逗号分隔。

使用分隔符时,允许尾随分隔符:

NormalList = [ 1, 2, 3 ]; // normal list
MultiLineList = [
        1,
        2,
        3, // trailing delimiter okay
    ];
ContextExpressionListThatIsFour = {
        Two = 1 + 1;
        Two + Two; // trailing delimiter okay
    };