108 избежания перемещения указателей объектов используется ключевое слово __pin для объявления экземпляров класса. После сборки проекта из lua-кода становится доступным глобальный класс dEngine и функции dot и другие. То есть можно вызвать конструктор и обращаться к полученной переменной как к классу. Из основных возможностей luabind следует отметить • перегрузка free функций • C++ классы в lua о перегрузка member функций о operators о properties о enums • lua функции в C++ • lua классы в C++ • lua классы (одинарное наследование) о происхождение от lua или C++ классов о переопределение виртуальных функций C++ классов • неявный вызов между регистрированными типами • контроль возвращаемых значений и параметров функций Полная ОП МГ, записанная в EBNF, выглядит следующим образом : chunk —> { stat [ 4] } block —> chunk stat —> varlistl ‘=’ explistl functioncall do block end while exp do block end repeat block until exp if exp then block { elseif exp then block } [ else block ] end return [ explistl ] |
271 Как видно из вышеперечисленных возможностей, IDE полностью отвечает v современным достижениям в области разработки инструментальных средств программирования и обладает необходимой функциональностью для 9 эффективной работы пользователя СПО. 6.1.5. Механизм скриптового языка lua Язык lua является одним из самых удобных и гибких современных скриптовых языков. Несмотря на существование других языков, таких как Ruby и Icon, выбор был сделан именно в пользу lua по следующим причинам : 1. Широкое распространение и, как следствие, хорошая отлаженность программного кода, высокая надежность, проверенная на представительном множестве проектов. 9 2. Высокое быстродействие, небольшие системные требования, легкость интеграции, поддержка объектно-ориентированного программирования с помощью расширения Luabind. 3. Наличие открытого исходного кода. На lua можно создавать сложный код как программистам, так и специалистам, не обладающим глубокими знаниями в программировании. С помощью luabind происходит «связывание» кода lua с C# и C++ кодом. Так как luabind является неуправляемым участком кода (в будущем 9 планируется перенести lua и luabind на управляемый код), при реализации взаимодействия задействован дополнительный класс-менеджер. Также для избежания перемещения указателей объектов используется ключевое слово __pin для объявления экземпляров класса. После сборки проекта из lua-кода становится доступным глобальный класс dEngine и функции dot и другие. То есть можно вызвать конструктор и обращаться к полученной переменной как к классу. Ф Из основных возможностей luabind следует отметить • перегрузка free функций * • C++ классы в lua 272 о перегрузка member функций о operators о properties о enums • lua функции в C++ • lua классы в C++ • lua классы (одинарное наследование) о происхождение от lua или C++ классов о переопределение виртуальных функций C++классов • неявный вызов между регистрированными типами • контроль возвращаемых значений и параметров функций Полная грамматика, записанная в EBNF, выглядит следующим образом chunk —> {stat [';’]} block chunk stat -> varlist 1 explist! functioncall do block end while exp do block end repeat block until exp I if exp then block {elseif exp then block} [ else block ] end return [ explistl ] I break j for Name exp exp [ exp ] do block end for Name {Name} in explistl do block end j function funcname funcbody j local function Name funcbody local namelist [ init ] funcname —» Name {Name} [ Name ] varlistl —> var {var} var -+ Name prefixexp '[’ exp ']’ prefixexp Name namelist -» Name {Name} init -+ '=' explistl explistl -> {exp } exp exp —> nil false true Number Literal function prefixexp tableconstructor exp binop exp unop exp prefixexp -> var functioncall '(’ exp ')’ functioncall —► prefixexp args prefixexp Name args args —► ‘(’ [ explistl ]')’ tableconstructor Literal function —> function funcbody funcbody —► *(’ [ parlistl ] ’)’ block end parlistl -> Name {Name} [] tableconstructor —»'{’ [ fieldlist ] *}’ fieldlist -+ field {fieldsep field } [ fieldsep ] field -+'(’ exp ‘j’ exp name exp exp fieldsep -» |