语法参考总览
本目录描述 Norm 源码的词法 token 和语法结构。当前使用接近 EBNF 的记法;首个编译器实现需要把全部产生式固化为机器可测试 grammar。
记法
text
"token" 固定关键字或符号
Name 另一条产生式
A? 可选
A* 零次或多次
A+ 一次或多次
A | B 二选一源文件
text
SourceFile := (AnnotationUse* PackageDeclaration)? Import* Declaration*package 位于文件开头,import 位于其他声明之前。没有 package 的文件是单文件脚本。源码顶层允许类型、函数和编译期常量,不允许任意执行语句。模块根 package 目录中的 module.norm 也使用 SourceFile 语法,并通过 Module module() 产生模块定义。
声明
text
Declaration := ClassDeclaration
| ValueDeclaration
| InterfaceDeclaration
| EnumDeclaration
| AnnotationDeclaration
| FunctionDeclarationNorm 使用类型前置:String name、Integer parse(String text)。generic 参数写在声明名后,nullable 标记写在完整类型后。
表达式与语句
字面量、名称、成员访问、调用、索引、运算和控制表达式产生值。变量声明、赋值、return、throw 等组成语句。if、for 和 switch 在值位置通过 break value 显式产生结果。