- •4.2 Среда и составные части
- •4.3 Типы и тэги
- •4.4 Язык
- •4.4.1 Лексические соглашения в языке
- •4.4.2 Приведение
- •4.4.3 Корректировка
- •4.4.4 Инструкции
- •4.4.4.1 Блоки
- •4.4.4.2 Присваивания
- •4.4.4.3 Структуры управления
- •4.4.4.4 Инструкция For
- •4.4.4.5 Обращения к функции как инструкции
- •4.4.4.6 Локальные объявления
- •4.4.5 Выражения
- •4.4.5.1 Базисные выражения
- •4.4.5.2 Арифметические операторы
- •4.4.5.3 Реляционные операторы
- •4.4.5.4 Логические операторы
- •4.4.5.5 Объединения
- •4.4.5.6 Старшинство
- •4.4.5.7 Конструкторы таблиц
- •4.4.5.8 Вызовы функций
- •4.4.5.9 Определение функций
- •4.4.6 Зона видимости и Upvalues
- •4.4.7 Обработка ошибок
- •4.4.8 Методы тэгов
- •4.5.1 Состояния
- •4.5.2 Стек и индексы
- •4.5.3 Манипуляции со стеком
- •4.5.4 Запросы к стеку
- •4.5.5 Помещение значений в стек
- •4.5.6 Уборка мусора
- •4.5.7 Userdata и тэги
- •4.5.8 Выполнение Lua-кода
- •4.5.9 Управление глобальными переменными в Lua
- •4.5.10 Управление таблицами в Lua
- •4.5.11 Использование таблиц как массивов
- •4.5.12 Вызов функций Lua
- •4.5.13 Определение функций c
- •4.5.14 Ссылки к Lua-объектам
- •4.5.15 Системный реестр
- •4.6 Стандартные библиотеки
- •4.6.1 Базисные функции
- •4.6.2 Строковые манипуляции в Lua
- •Шаблоны Символьный класс:
- •Элемент образца:
- •Шаблоны:
- •Сборы данных:
- •4.6.3 Математические функции
- •4.6.4 Средства ввода-вывода
- •4.6.5 Средства системы
- •4.7 Интерфейс отладки
- •4.7.1 Информация стека и функций
- •4.7.2 Управление локальными переменными
- •4.7.3 Обработчики прерываний
- •4.7.4 Рефлексивный интерфейс отладки
- •4.8 Lua в автономном режиме
- •Изменения в библиотеках
- •Изменения в api
- •4.12 Полный синтаксис Lua
- •4.13 Lua: интерпретатор языка Lua Синтаксис
- •Описание
- •4.14.1 Что Вы получаете
- •4.14.2 Проблемы и некоторые решения
- •4.14.3 Разделяемые библиотеки
- •4.14.4 Установка на Windows или Macintosh
4.4 Язык
Этот раздел описывает лексику, синтаксис и семантику Lua.
4.4.1 Лексические соглашения в языке
Идентификатором в Lua может быть любая строка символов, цифр и символов подчеркивания, не начинающаяся цифрой. Это совпадает с определением идентификаторов в большинстве языков, за исключением того, что определение символа зависит от текущего региона. Любой символ, который считается алфавитным в текущем языке, может использоваться в идентификаторе. То есть, алфавитные символы берутся из настроек текущей системной локали. Замечу, что для лучшей переносимости программ и их применения в разных регионах лучше все же ограничиться латинским алфавитом, цифрами и символом подчеркивания: они применимы везде. Следующие слова зарезервированы, и не могут использоваться как идентификаторы:
and break do else elseif return
end for function if in then
local nil not or repeat until while
Lua представляет собой язык, чувствительный к регистру символов: and является зарезервированным словом, но And и AND (если региональный язык разрешает) не одно и то же. Значит, приведенные варианты уже можно использовать как имена переменных. Кроме того, идентификаторы, начинающиеся с символа подчеркивания, сопровождаемого прописными буквами (типа _INPUT) зарезервированы для внутренних переменных. Их не стоит применять в своих программах.
Следующие строки обозначают другие лексемы (tokens):
~= <= >= < > == = + - *
( ) { } [ ] ; , . .. ... /
Литеральные строки могут быть разграничены одиночными или двойными кавычками, и могут содержать C-подобные управляющие последовательности: \a (bell), \b (backspace), \f (form feed), \n (newline), \r (carriage return), \t (horizontal tab), \v (vertical tab), \\ (backslash), \" (double quote), \' (single quote), и \newline (то есть, наклонная черта влево, сопровождаемая реальным newline, который приводит к переводу строки). Символ в строке может также быть определен числовым значением, через управляющую последовательность \ddd, где ddd последовательность до трех десятичных цифр. Строки в Lua могут содержать любое 8-разрядное значение, включая вложенные нули, которые могут быть определены как \000.
Литеральные строки могут также быть разграничены парами [[ ... ]]. Литералы в этой форме в скобках могут занимать по несколько строк, содержать вложенные пары скобок [[ ... ]] и не интерпретировать управляющие последовательности. Эта форма особенно удобна для записи строк, которые содержат части программы или другие цитируемые строки. Как пример, в системе использующей ASCII-кодировку, следующие три литерала эквивалентны:
1) "alo\n123\""
2) '\97lo\10\04923"'
3) [[alo
123"]]
Комментарии начинаются с двойного тире (--) и выполняются до конца строки. Кроме того, первая строка составной части всегда пропущена, если начинается с символа #. Это средство позволяет использование Lua как интерпретатора скриптов в Unix-системах.
Числовые константы могут быть написаны с факультативной целой частью и тоже факультативным дробной частями. Допустимо применение экспоненциальной формы запитси. Примеры имеющих силу числовых констант:
3 3.0 3.1416 314.16e-2 0.31416E1
