acpa/docs/BNF.txt
2023-08-30 15:16:59 +08:00

78 lines
2.2 KiB
Plaintext

标识符字符 ::= "a" | "b" | ... | "z" | "A" | "B" | ... | "Z" | "_" | "0" | "1" | ... | "9"
标识符 ::= <标识符字符> {标识符字符}
模板参数列表内容 ::= {<标识符> ","} <标识符>
模板参数列表 ::= "<" [模板参数列表内容] ">"
结构体定义 ::= "struct" <标识符> [模板参数列表] ("(" "delete" ")" | <函数参数列表>) "{" 结构体内容 "}" ";"
匿名结构体定义 ::= "struct" "{" <结构体内容> "}" <标识符> ";"
类型和变量 ::= <标识符> ":" <类型>
函数参数列表内容 ::= {<类型和变量> ","} <类型和变量>
函数参数列表 ::= "(" [函数参数列表内容] ")"
类型 ::= <函数类型>
| <模板参数类型>
| (<结构体类型> | <自动识别类型>) ["::" <局部类型>]
局部类型 ::= <结构体类型> ["::" <局部类型>]
结构体类型 ::= <标识符> [类型列表]
类型列表 ::= "<" [<类型> {"," <类型>}] ">"
函数类型 ::= "Fn" "(" <模板参数列表> "," <类型列表> "," 类型 ")"
自动识别类型 ::= "typeof" "(" <值> ")"
值 ::= <基本值>
| <基本值> "." <局部值>
基本值 ::= <标识符>
| <新实例>
| <新函数>
| <新公理>
| <直接函数调用>
新实例 ::= <结构体类型> [类型列表] <值列表>
新公理 ::= "admit" "<" <类型> ">" "(" ")"
直接函数调用 ::= (<标识符> | <新函数> | <新公理> | <直接函数调用>) [类型列表] <值列表>
局部值 ::= <局部基本值>
| <局部基本值> "." <局部值>
局部基本值 ::= <标识符>
| <局部直接函数调用>
局部直接函数调用 ::= (<标识符> | <局部直接函数调用>) [类型列表] <值列表>
值列表 ::= "(" [值列表内容] ")"
值列表内容 ::= <值>
| <值> "," <类型列表内容>
新函数 ::= "Fn" [模板参数列表] <函数参数列表> "->" <类型> <函数内容>
函数内容 ::= "{" [语句块] "return" <值> ";" "}"
语句块 ::= <语句>
| <语句> <语句块>
语句 ::= <变量定义>
| <结构体定义>
变量定义 ::= <标识符> "=" <值> ";"
结构体内容 ::= <结构体语句>
| <结构体语句> <结构体内容>
结构体语句 ::= ["public"] <语句>