Документация для проекта taker
This project is maintained by taker-project
Будет использоваться формат, похожий на формат .ini. Он вылядит следующим образом:
[Section1]
<name1>:<type1>=<value1>
<name2>:<type2>=<value2>
...
[Section2]
...
Названия секций и полей— строки, состоящие из латинских букв, цифр, символов +, -, _, ., /, однако названия не могут начинаться с дефиса. Между <name> и :, : и <type>, <type> и =, = и <value>, а также в конце строки разрешается любое количество пробелов.
С символа # начинаются однострочные комментарии. Комментарии могут появиться в начале строки или в ее середине. Символ # внутри значения типа string или char началом комментария не считается.
Названия секций и полей регистро-зависимы, но отличаться только регистром названия не должны. В разных секциях могут быть поля с одинаковыми названиями.
Поддерживаются следующие типы: bool, int, float, char, string, bool[], int[], float[], char[], string[].
bool— логическая переменная, может принисать значения true или false. Значения регистрозависимы, то есть True недопустимо.int— целое число, например: 0, 42, -38, 42742. Считается, что число 64-х битное знаковое.float— вещественное число, например: 5.2, 2e5, 5, -24885, inf. Для хранения таких чисел должен использоваться long double.char— одиночный символ, заключенный в '' или "", поддерживается экранирование как в C. Перед кавычками может также стоять символ c. Например: "c", '\n', "\033", '\'', c'4'.string— последовательность символов, заключенная в '' или "", также поддерживается экранирование как в C. Например, "hello", 'Multiline\ntext', "abracadabra", "\"Quotes\"".bool[], int[], float[], char[], string[]— массивы, перечисляющие значения через запятую и заключенные в []. Например, [1, 2, 3, 4], [1.5, inf, 2.44, -453], ['c', 'h', 'a', 'r', 's', '\n'], ["I", 'have', "an", '\'array\'', "of", 'strings'], [true, false, false, true].Поле любого типа может иметь значение null, обозначающее “переменная есть, но ей не назначено значение”. Если значение не указано (то есть поле имеет вид <name1>:<type1>), то значение переменной также считается равным null.
Также допустим формат <name>:auto=<value> или <name>=<value>. В этом случае значение указывать обязательно, при этом оно не должно быть равно null. В этом случае работает автоматическое определение типов. Типы просматриваются в порядке int, float, bool, string, char, int[], float[], bool[], string[], char[] и выбирается первый подходящий.
Пример файла:
[Flags]
white: bool = true
black: bool = false
arr:bool=[true,false,false,true]
field:bool
[Integers]
a:int=4
var.var-42 : int = 28518515 # длинное число
_: int = -0
hack: int = 555
arr1: int[] =[1,2,3,4,5]
arr2 : int[] = [ 42, 492759, 248, 48 ] # komment
[Floats]
q:float=33
88: float=88
_: float =248.8513
inf942: float = inf
HELLO/world:float[]=[1, 2.3, -42.5]
HEllO: float[]=[-inf, nan, 11, 0.0]
iMeanNothing: float = null
# Этот комментарий занимает целую строку
[Chars/And/Strings]
c1:char='\n'
c2 : char= c'3'
s1:string='hello\n\'\"\\\''
q1: string = ""
arr1 : string[] = ['a', 'hello', "array of string", "# this is not comment"]
arr2: string[] = ["null", null, "non-null"]
arr3: string[] = null
[Auto]
a1 : auto = ['5', '6', '7'] # тип string[]
a2:auto=3 # тип int
b1 = c'4' # тип char
b2=[1, 2, 3.0] # тип float[]