From 35b8c3bdcc013cceff191fd1af1f8746a7b53ca5 Mon Sep 17 00:00:00 2001 From: szdytom Date: Tue, 29 Aug 2023 17:43:45 +0800 Subject: [PATCH] reform to BNF Signed-off-by: szdytom --- docs/BNF.txt | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 结构表.txt | 59 ----------------------------------------- 2 files changed, 74 insertions(+), 59 deletions(-) create mode 100644 docs/BNF.txt delete mode 100644 结构表.txt diff --git a/docs/BNF.txt b/docs/BNF.txt new file mode 100644 index 0000000..48af84c --- /dev/null +++ b/docs/BNF.txt @@ -0,0 +1,74 @@ +标识符字符 ::= "a" | "b" | ... | "z" | "A" | "B" | ... | "Z" | "_" | "0" | "1" | ... | "9" + +标识符 ::= <标识符字符> {标识符字符} + +模板参数列表内容 ::= {<标识符> ","} <标识符> + +模板参数列表 ::= "<" [模板参数列表内容] ">" + +结构体定义 ::= "struct" <标识符> [模板参数列表] <函数参数列表> "{" 结构体内容 "}" ";" + +匿名结构体定义 ::= "struct" "{" <结构体内容> "}" <标识符> ";" + +类型和变量 ::= <标识符> ":" <类型> + +函数参数列表内容 ::= {<类型和变量> ","} <类型和变量> + +函数参数列表 ::= "(" [函数参数列表内容] ")" + +类型 ::= <函数类型> + | <模板参数类型> + | (<结构体类型> | <自动识别类型>) ["::" <局部类型>] + +局部类型 ::= <结构体类型> ["::" <局部类型>] + +结构体类型 ::= <标识符> [类型列表] + +类型列表 ::= "<" [<类型> {"," <类型>}] ">" + +函数类型 ::= "Fn" "(" <模板参数列表> "," <类型列表> "," 类型 ")" + +自动识别类型 ::= "typeof" "(" <值> ")" + +值 ::= <基本值> + | <基本值> "." <局部值> + +基本值 ::= 标识符 + | 新实例 + | 新函数 + | 直接函数调用 + +新实例 ::= <结构体类型> [类型列表] <值列表> + +直接函数调用 ::= (<标识符> | <新函数> | <直接函数调用>) [类型列表] <值列表> + +局部值 ::= <局部基本值> + | <局部基本值> "." <局部值> + +局部基本值 ::= <标识符> + | <局部直接函数调用> + +局部直接函数调用 ::= (<标识符> | <局部直接函数调用>) [类型列表] <值列表> + +值列表 ::= "(" [值列表内容] ")" + +值列表内容 ::= <值> + | <值> "," <类型列表内容> + +新函数 ::= "Fn" [模板参数列表] <函数参数列表> "->" <类型> <函数内容> + +函数内容 ::= "{" [语句块] "return" <值> ";" "}" + +语句块 ::= <语句> + | <语句> <语句块> + +语句 ::= <变量定义> + | <结构体定义> + +变量定义 ::= <标识符> "=" <值> ";" + +结构体内容 ::= <结构体语句> + | <结构体语句> <结构体内容> + +结构体语句 ::= ["public"] <语句> + diff --git a/结构表.txt b/结构表.txt deleted file mode 100644 index 6febf22..0000000 --- a/结构表.txt +++ /dev/null @@ -1,59 +0,0 @@ -结构体定义 = 关键词struct + 标识符 + (空 | 模板参数列表) + 函数参数列表 + 左花括号 + 结构体内容 + 右花括号 + 分号 - -匿名结构体定义 = 关键词struct + 左花括号 + 结构体内容 + 右花括号 + 标识符 + 分号 - -模板参数列表 = 左尖括号 + (空 | 模板参数列表内容) + 右尖括号 - -模板参数列表内容 = 标识符 | (标识符 + 逗号 + 模板参数列表内容) - -函数参数列表 = 左圆括号 + (空 | 函数参数列表内容) + 右圆括号 - -函数参数列表内容 = 类型和变量 | (类型和变量 + 逗号 + 函数参数列表内容) - -类型和变量 = 标识符 + 冒号 + 类型 - -类型 = 函数类型 | 模板参数类型 | ((结构体类型 | 自动识别类型) + (空 | (冒号冒号 + 局部类型)) - -局部类型 = 结构体类型 + (空 | (冒号冒号 + 局部类型)) - -结构体类型 = 标识符 + (空 | 类型列表) - -类型列表 = 左尖括号 + (空 | 类型列表内容) + 右尖括号 - -类型列表内容 = 类型 | (类型 + 逗号 + 类型列表内容) - -函数类型 = 关键词Fn + 左圆括号 + 模板参数列表 + 逗号 + 类型列表 + 逗号 + 类型 + 右圆括号 - -自动识别类型 = 关键词typeof + 左括号 + 值 + 右括号 - -值 = 基本值 | (基本值 + 点 + 局部值) - -基本值 = 标识符 | 新实例 | 新函数 | 直接函数调用 - -新实例 = 结构体类型 + (空 | 类型列表) + 值列表 - -直接函数调用 = (标识符 | 新函数 | 直接函数调用) + (空 | 类型列表) + 值列表 - -局部值 = 局部基本值 | (局部基本值 + 点 + 局部值) - -局部基本值 = 标识符 | 局部直接函数调用 - -局部直接函数调用 = (标识符 | 局部直接函数调用) + (空 | 类型列表) + 值列表 - -值列表 = 左圆括号 + (空 | 值列表内容) + 右圆括号 - -值列表内容 = 值 | (值 + 逗号 + 类型列表内容) - -新函数 = 关键词Fn + (空 | 模板参数列表) + 函数参数列表 + 箭头 + 类型 + 函数内容 - -函数内容 = 左花括号 + (空 | 语句块) + 关键词return + 值 + 分号 + 右花括号 - -语句块 = 语句 | (语句 + 语句块) - -语句 = 变量定义 | 结构体定义 - -变量定义 = 标识符 + 等号 + 值 + 分号 - -结构体内容 = 结构体语句 | (结构体语句 + 结构体内容) - -结构体语句 = (空 | 关键词public) + 语句 \ No newline at end of file