Документация для проекта 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[]