Лексические элементы
Исходный код должен быть в кодировке UTF-8. Синтаксис описан с использованием расширенной формы Бэкуса-Наура.
1
newline = 0x0A
2
unicode_char = /* Unicode code point */
3
unicode_linechar = /* Unicode code point except newline */
4
unicode_letter = /* a Unicode code point classified as "Letter" */
5
letter = unicode_letter | "_"
6
decimal_digit = "0""9"
7
octal_digit = "0""7"
8
hex_digit = "0""9" | "A""F" | "a""f"
9
decimals = decimal_digit { decimal_digit }
10
exponent = ( "e" | "E" ) [ "+" | "-" ] decimals
Copied!

Комментарии и замена символов

Имеются следующие типы комментариев и автоматически заменяемых символов
// Однострочный комментарий Однострочный комментарий начинается с двойного слеша // и заканчивается символом перевода строки newline.
/* Общий комментарий */ Общий комментарий начинается с комбинации / и заканчивается /. Такие комментарии могут вставляться где угодно.
# Заголовок В начале скрипта можно указать данные для использования в других программах. Такие комментарии должны идти подряд в каждой строке от начала скрипта. Можно не указывать '#' в начале каждой строки, а вставить ### перед и после текста.
1
#!/usr/local/bin/gentee
2
# первая строка может использоваться для запуска скрипта в Linux.
3
###
4
desc = Description of the script
5
result = ok
6
var = value
7
###
Copied!
; Символ перевода строки служит разделителем между выражениями и управляющими конструкциями. Точка с запятой заменяется на перевод строки. Таким образом, вы можете использовать точку с запятой, если вы хотите разместить несколько выражений на одной строке.
: Двоеточие заменяется на открывающую фигурную скобку и вставляется закрывающая фигурная скобка в конце текущей строки.
1
// эти примеры эквивалентны
2
if a == 10 : a = b + c; c = d + e
3
4
if a == 10
5
{
6
a = b + c
7
c = d + e
8
}
Copied!

Идентификаторы

Идентификаторы - это имена, которые используются для обозначения переменных, типов, констант, функций и т.д.. Идентификатор определяется с помощью последовательности букв и цифр, но начинаться идентификатор должен с буквы.
1
identifier = letter { letter | unicode_digit }
2
IdentifierList = identifier { identifier }
Copied!
Имеется несколько предопределённых идентификаторов и ключевых слов. Следующие слова зарезервированы и не могут быть использованы в качестве идентификаторов.

Ключевые слова

catch const elif else false for func go if in local recover retry return run struct true try while

Литералы

Целочисленный литерал - это последовательность цифр представляющая целочисленное число (константу).
1
decimal = ( "1""9" ) { decimal_digit }
2
octal = "0" { octal_digit } .
3
hex = "0" ( "x" | "X" ) hex_digit { hex_digit }
4
integer = decimal | octal | hex
5
float = decimals "." [ decimals ] [ exponent ] | decimals exponent
Copied!
1
0x34Fab
2
0722
3
19023862
4
0.123e+3
5
234.e-2
6
9.7732E-1
7
0.0177E+2
8
5e-2
Copied!
Символьный char литерал служит для идентификации Unicode символа. Вы можете указать один конкретный символ или последовательность символов начинающуюся с обратного слеша заключенные в одинарные кавычки. Последовательность символов с обратным слешем может иметь несколько форматов:
1
'\r', '\n', '\t', '\"', '\'', '\\'
2
\xa5 \x2B (\x + two hex_digit)
3
\u03B1 (\u + four hex_digit)
4
\0371 (\0 + three octal_digit)
Copied!
1
byteVal = octalStr | hexStr .
2
octalStr = `\` "0" octal_digit octal_digit octal_digit .
3
hexStr = `\` "x" hex_digit hex_digit .
4
uShort = `\` "u" hex_digit hex_digit hex_digit hex_digit .
5
uLong = `\` "U" hex_digit hex_digit hex_digit hex_digit hex_digit hex_digit hex_digit hex_digit .
6
escapedChar = `\` ( "a" | "b" | "f" | "n" | "r" | "t" | "v" | `\` | `"` )
7
charLit = "'" ( unicode_char | uShort | uLong | escapedChar | byteVal | `\'`) "'" .
Copied!
Имеется два типа строковых литералов. 1. Строка в обратных кавычках может содержать любые символы. Если нужно указать обратную кавычку, то нужно удвоить её. 2. Строка в двойных кавычках также может содержать любые символы (в том числе перенос строки), но у неё имеется управляющий символ в виде обратной косой черты. Вы можете указывать после обратной косой черты следующие символы
1
\a U+0007 alert or bell
2
\b U+0008 backspace
3
\f U+000C form feed
4
\n U+000A newline
5
\r U+000D carriage return
6
\t U+0009 horizontal tab
7
\v U+000b vertical tab
8
\\ U+005c backslash
9
\" U+0022 double quote
Copied!
1
stringLit = stringBackQuote | stringDoubleQuote
2
stringBackQuote = "`" { unicode_char | "%{" Expression "}" | "${" identifier "}" } "`"
3
stringDoubleQuote = `"` { unicode_char | uShort | uLong | escapedChar | byteVal | "\{" Expression "}" } `"`
Copied!
В любой тип строки можно вставлять выражения. При этом тип выражения может быть любым, если имеется соответствующая функция приведения этого типа к строке. Выражения должны быть заключены в фигурные скобки со предшествующим знаком % (для обратных кавычек) или обратной косой чертой (в случае двойных кавычек).
1
`10+20 equals %{10 + 20}. User name is "%{USERNAME}"`
2
"This is the first line.\r\nThis is \{ `the` + `second`} line."
Copied!
Last modified 2yr ago