FVV 1
FVV 1 的语法标准
FVV 1 指的不是最初的 FVV 语法标准,而是移除掉复杂语法后的 “纯净版本”
自 FVV 3 起的 FVV 大版本,均会以 FVV 1 解析器 + 对应的大版本解析器 组成,依此实现复杂内容的插件化
FVV 1 的语法标准可能会因为大版本更新需要而进行变化
语法标准
<基本类型>
BoolVal = true <布尔值,解析时会忽略大小写>
IntVal1 = 1 <十进制整数(整数、浮点数均不支持正号)>
IntVal2 = 1000'0000 <有引号的十进制整数>
IntVal3 = 0x5 <十六进制整数>
IntVal4 = 0o2 <八进制整数,也可写作“02”>
IntVal5 = 0b0 <二进制整数>
FloatVal = -1.0 <浮点数>
StrVal = "字符串" <字符串>
<列表>
StrList = ["1", "2", "3"] <字符串列表>
<不再多写...>
<组>
Group = {
SubVal = "子值" <子值>
SubGroup = {
SubVal = "子值" <子组子值>
}
} <普通组>
GroupList = [
{
SubVal = "组一子值"
} <组一>
{
SubVal = "组二子值"
} <组二>
] <组列表>
<赋值>
Value1 = StrVal <常规赋值>
Value2 = "字符串" <Value1>
<这里把注释给赋值了,注释的赋值只会生效于目标是字符串类型的情况,不会隐式转换>
List1 = [Value1, Value2] <常规列表赋值>
List2 = [List1] <列表赋值列表,会自动展开>
Group1.SubVal1 = Value1 <通过点连接组名赋值到子值>
Group2.SubVal = Group1.SubVal1 <用同样的方式赋值到另一个子值>
Group1 = {
SubGroup = {
SubVal2 = SubVal1 <展开赋值>
}
}
<赋值遵守就近原则,并且赋值的字符串将按原样存储>
<仅有常规赋值会保留原样,列表或注释中的赋值不会保留>
<拼接与类型提升>
StrVal1 = "字符串" + "字符串" <常规拼接>
StrVal2 = StrVal1 + true + 1 + 1.0 <所有非字符串基本类型进行拼接都会提升为字符串>
<解析时不会记录拼接的原样,所有拼接中的赋值都会丢失>
StrList1 = ["字符串" + "字符串"] <拼接在列表中也可用>
StrList2 = [StrVal1, StrList1, true, 1, 1.0] <在列表中也会提升类型为优先级最高的字符串>
FloatList1 = [true, 1, 1.0] <字符串之下是浮点数>
IntList1 = [true, 1] <浮点数之下是整数>
BoolList1 = [true] <整数之下只有布尔值了>
<组不支持拼接,列表也不支持拼接(因为已经支持在列表中展开其他列表了)>
<并且列表仅允许单一类型,组与基本类型不可以混合存储>
<分隔符>
Val1 = 1 <用换行省略了分号>
Val2 = 2 <显式的分号声明>;
ValList1 = [
1
2
3
] <用换行省略了逗号>
ValList2 = [
1,
2,
3,
] <显式的逗号声明(末尾是否有逗号不影响解析)>
<其他字符>
Key1: "Value" <冒号与等号等价>
Key2:"Value" <全角冒号同样可用>
IntVal = 1000’0000 <有全角引号的整数>
Say1 = "\"Hello\" “Hello”" <常规字符串>
Say2 = “"Hello" “Hello\”” <用全角引号包裹的字符串>
<可以看到转译也会因此改变>
Say3 = `
"Hello" “Hello”
` <用反引号包裹的原始字符串,解析时会去掉开头与结尾的空白,并且去掉最小缩进>
Grp ={Lst1 =[Key1, Key2]}<全角括号(用花括号省略了应该写在“Lst1”定义后的分号)>
Lst2 = ["Value",];<全角分隔符>
<除引号外,其他全角字符均可与半角字符混用>