reform to BNF
Signed-off-by: szdytom <szdytom@qq.com>
This commit is contained in:
parent
412cbc8622
commit
35b8c3bdcc
74
docs/BNF.txt
Normal file
74
docs/BNF.txt
Normal file
@ -0,0 +1,74 @@
|
||||
标识符字符 ::= "a" | "b" | ... | "z" | "A" | "B" | ... | "Z" | "_" | "0" | "1" | ... | "9"
|
||||
|
||||
标识符 ::= <标识符字符> {标识符字符}
|
||||
|
||||
模板参数列表内容 ::= {<标识符> ","} <标识符>
|
||||
|
||||
模板参数列表 ::= "<" [模板参数列表内容] ">"
|
||||
|
||||
结构体定义 ::= "struct" <标识符> [模板参数列表] <函数参数列表> "{" 结构体内容 "}" ";"
|
||||
|
||||
匿名结构体定义 ::= "struct" "{" <结构体内容> "}" <标识符> ";"
|
||||
|
||||
类型和变量 ::= <标识符> ":" <类型>
|
||||
|
||||
函数参数列表内容 ::= {<类型和变量> ","} <类型和变量>
|
||||
|
||||
函数参数列表 ::= "(" [函数参数列表内容] ")"
|
||||
|
||||
类型 ::= <函数类型>
|
||||
| <模板参数类型>
|
||||
| (<结构体类型> | <自动识别类型>) ["::" <局部类型>]
|
||||
|
||||
局部类型 ::= <结构体类型> ["::" <局部类型>]
|
||||
|
||||
结构体类型 ::= <标识符> [类型列表]
|
||||
|
||||
类型列表 ::= "<" [<类型> {"," <类型>}] ">"
|
||||
|
||||
函数类型 ::= "Fn" "(" <模板参数列表> "," <类型列表> "," 类型 ")"
|
||||
|
||||
自动识别类型 ::= "typeof" "(" <值> ")"
|
||||
|
||||
值 ::= <基本值>
|
||||
| <基本值> "." <局部值>
|
||||
|
||||
基本值 ::= 标识符
|
||||
| 新实例
|
||||
| 新函数
|
||||
| 直接函数调用
|
||||
|
||||
新实例 ::= <结构体类型> [类型列表] <值列表>
|
||||
|
||||
直接函数调用 ::= (<标识符> | <新函数> | <直接函数调用>) [类型列表] <值列表>
|
||||
|
||||
局部值 ::= <局部基本值>
|
||||
| <局部基本值> "." <局部值>
|
||||
|
||||
局部基本值 ::= <标识符>
|
||||
| <局部直接函数调用>
|
||||
|
||||
局部直接函数调用 ::= (<标识符> | <局部直接函数调用>) [类型列表] <值列表>
|
||||
|
||||
值列表 ::= "(" [值列表内容] ")"
|
||||
|
||||
值列表内容 ::= <值>
|
||||
| <值> "," <类型列表内容>
|
||||
|
||||
新函数 ::= "Fn" [模板参数列表] <函数参数列表> "->" <类型> <函数内容>
|
||||
|
||||
函数内容 ::= "{" [语句块] "return" <值> ";" "}"
|
||||
|
||||
语句块 ::= <语句>
|
||||
| <语句> <语句块>
|
||||
|
||||
语句 ::= <变量定义>
|
||||
| <结构体定义>
|
||||
|
||||
变量定义 ::= <标识符> "=" <值> ";"
|
||||
|
||||
结构体内容 ::= <结构体语句>
|
||||
| <结构体语句> <结构体内容>
|
||||
|
||||
结构体语句 ::= ["public"] <语句>
|
||||
|
59
结构表.txt
59
结构表.txt
@ -1,59 +0,0 @@
|
||||
结构体定义 = 关键词struct + 标识符 + (空 | 模板参数列表) + 函数参数列表 + 左花括号 + 结构体内容 + 右花括号 + 分号
|
||||
|
||||
匿名结构体定义 = 关键词struct + 左花括号 + 结构体内容 + 右花括号 + 标识符 + 分号
|
||||
|
||||
模板参数列表 = 左尖括号 + (空 | 模板参数列表内容) + 右尖括号
|
||||
|
||||
模板参数列表内容 = 标识符 | (标识符 + 逗号 + 模板参数列表内容)
|
||||
|
||||
函数参数列表 = 左圆括号 + (空 | 函数参数列表内容) + 右圆括号
|
||||
|
||||
函数参数列表内容 = 类型和变量 | (类型和变量 + 逗号 + 函数参数列表内容)
|
||||
|
||||
类型和变量 = 标识符 + 冒号 + 类型
|
||||
|
||||
类型 = 函数类型 | 模板参数类型 | ((结构体类型 | 自动识别类型) + (空 | (冒号冒号 + 局部类型))
|
||||
|
||||
局部类型 = 结构体类型 + (空 | (冒号冒号 + 局部类型))
|
||||
|
||||
结构体类型 = 标识符 + (空 | 类型列表)
|
||||
|
||||
类型列表 = 左尖括号 + (空 | 类型列表内容) + 右尖括号
|
||||
|
||||
类型列表内容 = 类型 | (类型 + 逗号 + 类型列表内容)
|
||||
|
||||
函数类型 = 关键词Fn + 左圆括号 + 模板参数列表 + 逗号 + 类型列表 + 逗号 + 类型 + 右圆括号
|
||||
|
||||
自动识别类型 = 关键词typeof + 左括号 + 值 + 右括号
|
||||
|
||||
值 = 基本值 | (基本值 + 点 + 局部值)
|
||||
|
||||
基本值 = 标识符 | 新实例 | 新函数 | 直接函数调用
|
||||
|
||||
新实例 = 结构体类型 + (空 | 类型列表) + 值列表
|
||||
|
||||
直接函数调用 = (标识符 | 新函数 | 直接函数调用) + (空 | 类型列表) + 值列表
|
||||
|
||||
局部值 = 局部基本值 | (局部基本值 + 点 + 局部值)
|
||||
|
||||
局部基本值 = 标识符 | 局部直接函数调用
|
||||
|
||||
局部直接函数调用 = (标识符 | 局部直接函数调用) + (空 | 类型列表) + 值列表
|
||||
|
||||
值列表 = 左圆括号 + (空 | 值列表内容) + 右圆括号
|
||||
|
||||
值列表内容 = 值 | (值 + 逗号 + 类型列表内容)
|
||||
|
||||
新函数 = 关键词Fn + (空 | 模板参数列表) + 函数参数列表 + 箭头 + 类型 + 函数内容
|
||||
|
||||
函数内容 = 左花括号 + (空 | 语句块) + 关键词return + 值 + 分号 + 右花括号
|
||||
|
||||
语句块 = 语句 | (语句 + 语句块)
|
||||
|
||||
语句 = 变量定义 | 结构体定义
|
||||
|
||||
变量定义 = 标识符 + 等号 + 值 + 分号
|
||||
|
||||
结构体内容 = 结构体语句 | (结构体语句 + 结构体内容)
|
||||
|
||||
结构体语句 = (空 | 关键词public) + 语句
|
Loading…
x
Reference in New Issue
Block a user