Lua#

Lua - это интерпретатор, выполняющий код, написанный на языке программирования Lua, без предварительной компиляции в машинный код.

Функциональные возможности интерпретатора:

  • Интерактивный режим: позволяет вводить команды и сразу получать результат их выполнения.

  • Поддержка основных конструкций языка: поддерживает переменные, типы данных, управляющие конструкции, функции первого класса, замыканий и рекурсии, таблицы.

  • Работа с файлами: позволяет читать и записывать файлы.

  • Взаимодействие с операционной системой: выполняет системные команды, управляет файловой системой, получает информацию о системе.

  • Работа с модулями: поддерживает модульность через функцию require, которая позволяет подключить внешние библиотеки и модули.

  • Обработка ошибок: обрабатывает ошибки с помощью конструкции pcall и xpcall.

  • Метатаблицы и метаметоды: настраивает поведение таблиц с помощью метатаблиц и метаметодов.

  • Сопрограммы: поддерживает сопрограммы, которые позволяют организовывать асинхронное выполнение кода.

  • Интеграция с C: интегрируется с языком C.

  • Легковесность и производительность: подходит для работы на устройствах с ограниченными ресурсами и отличается высокой скоростью.

  • Расширяемость: есть возможность добавления новых функций с помощью библиотек, написанных на Lua или C.

  • Поддержка Unicode: поддерживает Unicode для работы с текстом.

  • Отладка: предоставляет базовые возможности отладки.

Установка

Интерпретатор Lua устанавливается с помощью команды dnf install. Подробнее про работу пакетного менеджера DNF в разделе «Управление программными пакетами: установка, обновление, удаление».

Использование интерпретатора#

Для работы с интерпретатором используйте команду:

lua <options> <script> <args>

Где:

  • <options> - опции, подробнее смотрите в таблице «Опции Lua» раздела «Опции»;

  • <script> - файл, содержащий код на Lua;

  • <args> - аргументы.

Опции#

Опции интерпретатора приведены в таблице ниже.

Опции Lua#

Опция

Описание

-e stat

Выполнить код Lua из командной строки

-l modname

Загрузить модуль modname без вызова функции init

-i

Включить интерактивный режим после выполнения скрипта или других команд

-v

Показать версию Lua и продолжить выполнение команды

-E

Интегрировать переменные окружения Lua

-

Считать код Lua из стандартного ввода

--

Передать скрипту аргументы после -- без обработки интерпретатором

Переменные окружения#

Переменные окружения интерпретатора приведены в таблице ниже.

Переменные окружения Lua#

Переменная

Описание

LUA_PATH, LUA_PATH_5_4

Определить путь для поиска модулей Lua

LUA_CPATH, LUA_CPATH_5_4

Определить путь для поиска библиотек

LUA_INIT, LUA_INIT_5_4

Выполнить код Lua при запуске интерпретатора

Примеры использования#

  • Для запуска интерпретатора через файл с расширением .lua необходимо:

    • Поместить исходный код в тестовый файл с расширением .lua:

      print("test")
      
    • Запустить программу:

      lua test.lua
      

      Вывод команды:

      test
      
  • Для запуска Lua в интерактивном режиме используйте команду:

    lua
    

    Далее можно ввести любую команду Lua, например:

    print(10+10)
    

    Вывод команды:

    20
    

Дополнительная информация#

Дополнительную информацию можно получить, выполнив команду:

man lua

m4#

m4 - это универсальный макропроцессор, предназначенный для интерпретации текстовых файлов, содержащих макросы и специальные команды, которые используются для расширения текста и для работы с различными языками.

Функциональные возможности интерпретатора:

  • Определение и использование макросов: позволяет определять пользовательские макросы и создавать шаблоны с параметрами.

  • Встроенные функции: предоставляет множество встроенных функций для различных операций, например, условные конструкции, арифметические операции, работа со строками, преобразование регистра, работа с файлами.

  • Рекурсия: создает сложные структуры данных или выполняет повторяющиеся операции.

  • Управление выводом: удаляет все символы до конца строки, перенаправляет вывод в буферы для хранения, возвращает содержимое буфера обратно в поток вывода.

  • Управление макросами: удаляет, сохраняет и восстанавливает макросы.

  • Генерация кода: используется для автоматической генерации кода на других языках программирования.

  • Подстановка текста: может выполнять простую подстановку текста, заменяя определенные строки другими значениями.

  • Циклы и повторения: не имеет явной поддержки циклов, но их можно реализовать при помощи рекурсии или определенных встроенных функций.

  • Отладка: выводит определения всех макросов.

Установка

Интерпретатор m4 устанавливается с помощью команды dnf install. Подробнее про работу пакетного менеджера DNF в разделе «Управление программными пакетами: установка, обновление, удаление».

Использование интерпретатора#

Для работы с интерпретатором используйте команду:

m4 <option> <file>

Где:

  • <option> - наименование опции, подробнее смотрите в таблице «Опции m4»;

  • <file> - входной файл для обработки.

Опции#

Опции интерпретатора приведены в таблице ниже.

Опции m4#

Опция

Описание

--help

Вывести справочную информацию

--version

Вывести информацию о версии и завершить работу

-E, --fatal-warnings

Указать, какие предупреждения должны приводить к немедленному завершению работы программы с ошибкой

-i, --interactive

Запустить программу в интерактивном режиме

-P, --prefix-builtins

Добавить ко всем встроенным функциям префикс m4

-Q, --quiet, --silent

Управлять уровнем вывода предупреждений, подавлять определенные категории предупреждений

--warn-macro-sequence[=REGEXP]

Выдать предупреждение, когда последовательность символов, которая выглядит как вызов макроса, не соответствует определенным правилам или не является действительным макросом

-D, --define-NAME[=VALUE]

Предварительно определить макросы перед началом обработки входных файлов

-I, --include=DIRECTORY

Добавить дополнительные каталоги, где программа будет искать файлы

-s, --synclines

Добавить специальные комментарии в выходной файл. Комментарии указывают номер строки и имя исходного файла, из которого был сгенерирован соответствующий вывод

-U, --undefine=NAME

Отменить определения макроса с указанным именем NAME

-g, --gnu

Включить режим совместимости с GNU m4

-G, --traditional

Включить режим совместимости с классическим поведением макропроцессора m4

-H, --hashsize=PRIME

Настроить размер хеш-таблицы, которая применяется для хранения определений макросов

-L, --nesting-limit=NUMBER

Установить ограничения на максимальную глубину вложенности вызовов макросов

-F, --freeze-state=FILE

Сохранить текущее состояние макропроцессора в указанном файле FILE

-R, --reload-state=FILE

Восстановить сохраненное состояние макропроцессора из указанного файла FILE

-d, --debug[=FLAGS]

Активировать режим отладки с выводом дополнительной информации о работе программы. Подробную информацию о флагах смотрите в таблице «Флаги опции -d». При отсутствии флагов опция -d будет работать, как если бы были установлены флаги aeq

--debugfile[=FILE]

Направить отладочную информацию в указанный файл FILE

-l, --arglength=NUM

Установить максимальную длину аргументов, которые могут быть переданы макросам

-t, --trace=NAME

Активировать трассировку указанного макроса с именем NAME

Флаги#

Флаги интерпретатора, используемые при вызове опции -d, приведены в таблице ниже.

Флаги опции -d#

Флаг

Описание

a

Показать, какие макросы вызываются и какие аргументы передаются им во время обработки текста

c

Отследить, какие файлы и данные читаются или записываются во время выполнения программы

e

Отследить, какие специфические расширения или особенности GNU m4 применяются во время выполнения

f

Отследить, какой именно файл обрабатывается в данный момент

i

Отобразить, как m4 работает с различными файлами и как происходит поток обработки данных

l

Определить, какой именно участок кода или файла обрабатывается

p

Отобразить, какие аргументы передаются каждому вызываемому макросу

q

Подавить обычный вывод программы, не отображать на экране и не записывать в выходной файл основной результат работы

t

Включить трассировку вызовов макросов

x

Предоставить более подробную информацию о работе программы, включая дополнительные детали о вызовах макросов, обработке входных данных и других внутренних операциях

V

Вывести информацию о версии программы

Макросы#

Макросы интерпретатора приведены в таблице ниже.

Макросы m4#

Макрос

Описание

changequote

Изменить символы, которые используются для обозначения начала и конца строк или параметров макросов

changecom

Изменить символ или последовательность символов, которые обозначают начало однострочного комментария

decr

Уменьшить числовое значение на 1

define

Определить новый макрос или переопределить существующий

defn

Получить строковое представление определения макроса без его выполнения

divert

Перенаправить вывод в один из 10 внутренних буферов

divnum

Получить номер текущего буфера вывода

dnl

Удалить все символы до конца текущей строки, включая символ новой строки

dumpdef

Вывести информацию об определениях макросов

errprint

Вывести информацию об ошибках или диагностическую информацию в поток ошибок

ifdef

Проверить определенность макроса

ifelse

Выполнить условную обработку текста на основе сравнения значений

include

Включить содержимое указанного файла в поток обработки

incr

Увеличить числовое значение на 1

index

Определить позицию первого вхождения одной строки внутри другой

len

Определить длину строки в указанном аргументе

m4exit

Завершить работу программы с указанным кодом выхода

m4wrap

Зарегистрировать код, который будет выполнен после завершения основной обработки входного файла

maketemp

Создать имя временного файла

popdef

Восстановить предыдущее определение макроса, если оно было временно переопределено с помощью макроса pushdef

pushdef

Временно переопределить макрос, сохраняя его текущее определение в стеке

shift

Удалить первые аргументы из списка аргументов макроса

sinclude

Включить содержимое файла

substr

Извлечь подстроку из заданной строки

syscmd

Выполнить внешнюю команду операционной системы из скрипта m4

sysval

Получить код выхода последней выполненной системной команды, которая была вызвана с помощью макроса syscmd

translit

Заменить символы в строке

traceon

Включить трассировку для одного или нескольких макросов

traceoff

Выключить трассировку для одного или нескольких макросов

undefine

Отменить определение макроса, удалить его из текущего контекста

undivert

Вывести содержимое буферов, которые были ранее заполнены с помощью макроса divert

Пример использования#

  • Для проверки корректности установки интерпретатора m4 используйте, например:

    define(`HELLO', `Hello, world!') HELLO
    

    Затем выполните команду:

    m4 test.m4
    

    Ожидаемый вывод:

    Hello, world!
    

Дополнительная информация#

Дополнительную информацию можно получить, выполнив команду:

man m4

Или:

m4 --help