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 关键字全部以小写字母开头,例如 module、where、let、use。这些关键字指定了语言中的语义。有关完整的关键字列表,请参阅关键字参考。
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
};
No comments to display
No comments to display