Исходный код должен быть в кодировке UTF-8. Синтаксис описан с использованием расширенной формы Бэкуса-Наура.
newline = 0x0Aunicode_char = /* Unicode code point */unicode_linechar = /* Unicode code point except newline */unicode_letter = /* a Unicode code point classified as "Letter" */letter = unicode_letter | "_"decimal_digit = "0" … "9"octal_digit = "0" … "7"hex_digit = "0" … "9" | "A" … "F" | "a" … "f"decimals = decimal_digit { decimal_digit }exponent = ( "e" | "E" ) [ "+" | "-" ] decimals
Имеются следующие типы комментариев и автоматически заменяемых символов
// Однострочный комментарий
Однострочный комментарий начинается с двойного слеша //
и заканчивается символом перевода строки newline.
/* Общий комментарий */
Общий комментарий начинается с комбинации / и заканчивается /. Такие комментарии могут вставляться где угодно.
# Заголовок
В начале скрипта можно указать данные для использования в других программах. Такие комментарии должны идти подряд в каждой строке от начала скрипта. Можно не указывать '#' в начале каждой строки, а вставить ### перед и после текста.
#!/usr/local/bin/gentee# первая строка может использоваться для запуска скрипта в Linux.###desc = Description of the scriptresult = okvar = value###
; Символ перевода строки служит разделителем между выражениями и управляющими конструкциями. Точка с запятой заменяется на перевод строки. Таким образом, вы можете использовать точку с запятой, если вы хотите разместить несколько выражений на одной строке.
: Двоеточие заменяется на открывающую фигурную скобку и вставляется закрывающая фигурная скобка в конце текущей строки.
// эти примеры эквивалентныif a == 10 : a = b + c; c = d + eif a == 10{a = b + cc = d + e}
Идентификаторы - это имена, которые используются для обозначения переменных, типов, констант, функций и т.д.. Идентификатор определяется с помощью последовательности букв и цифр, но начинаться идентификатор должен с буквы.
identifier = letter { letter | unicode_digit }IdentifierList = identifier { identifier }
Имеется несколько предопределённых идентификаторов и ключевых слов. Следующие слова зарезервированы и не могут быть использованы в качестве идентификаторов.
catch const elif else false for func go if in local recover retry return run struct true try while
Целочисленный литерал - это последовательность цифр представляющая целочисленное число (константу).
decimal = ( "1" … "9" ) { decimal_digit }octal = "0" { octal_digit } .hex = "0" ( "x" | "X" ) hex_digit { hex_digit }integer = decimal | octal | hexfloat = decimals "." [ decimals ] [ exponent ] | decimals exponent
0x34Fab0722190238620.123e+3234.e-29.7732E-10.0177E+25e-2
Символьный char литерал служит для идентификации Unicode символа. Вы можете указать один конкретный символ или последовательность символов начинающуюся с обратного слеша заключенные в одинарные кавычки. Последовательность символов с обратным слешем может иметь несколько форматов:
'\r', '\n', '\t', '\"', '\'', '\\'\xa5 \x2B (\x + two hex_digit)\u03B1 (\u + four hex_digit)\0371 (\0 + three octal_digit)
byteVal = octalStr | hexStr .octalStr = `\` "0" octal_digit octal_digit octal_digit .hexStr = `\` "x" hex_digit hex_digit .uShort = `\` "u" hex_digit hex_digit hex_digit hex_digit .uLong = `\` "U" hex_digit hex_digit hex_digit hex_digit hex_digit hex_digit hex_digit hex_digit .escapedChar = `\` ( "a" | "b" | "f" | "n" | "r" | "t" | "v" | `\` | `"` )charLit = "'" ( unicode_char | uShort | uLong | escapedChar | byteVal | `\'`) "'" .
Имеется два типа строковых литералов. 1. Строка в обратных кавычках может содержать любые символы. Если нужно указать обратную кавычку, то нужно удвоить её. 2. Строка в двойных кавычках также может содержать любые символы (в том числе перенос строки), но у неё имеется управляющий символ в виде обратной косой черты. Вы можете указывать после обратной косой черты следующие символы
\a U+0007 alert or bell\b U+0008 backspace\f U+000C form feed\n U+000A newline\r U+000D carriage return\t U+0009 horizontal tab\v U+000b vertical tab\\ U+005c backslash\" U+0022 double quote
stringLit = stringBackQuote | stringDoubleQuotestringBackQuote = "`" { unicode_char | "%{" Expression "}" | "${" identifier "}" } "`"stringDoubleQuote = `"` { unicode_char | uShort | uLong | escapedChar | byteVal | "\{" Expression "}" } `"`
В любой тип строки можно вставлять выражения. При этом тип выражения может быть любым, если имеется соответствующая функция приведения этого типа к строке. Выражения должны быть заключены в фигурные скобки со предшествующим знаком % (для обратных кавычек) или обратной косой чертой (в случае двойных кавычек).
`10+20 equals %{10 + 20}. User name is "%{USERNAME}"`"This is the first line.\r\nThis is \{ `the` + `second`} line."