Обнаружение блоков кода при выполнении скрипта Lua построчно - PullRequest
3 голосов
/ 23 марта 2011

Это может звучать глупо, но я не вижу упоминаний об этой конкретной проблеме.В основном:

Я хочу выполнять скрипт Lua построчно, в первую очередь, чтобы иметь возможность приостановить / возобновить выполнение в любое время и в любом месте, где я захочу.То, что я делаю, очень просто: загрузить чанк с помощью luaL_loadbuffer (), а затем выполнить lua_pcall ().

Дело в том ... Как правильно определить блоки Lua для их атомарного выполнения?

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

Я могу себе представить, что одним из решений будет ручная обработка стека, в который я помещаю управляющие ключевые слова, которые я могу распознать в скрипте («функция», «если», «делать» и т. д.)и соответствующее им условие «конец», если я найду вложенные блоки.Как только я нажимаю последний «конец», я называю весь блок, но это звучит просто ужасно.Наверняка должен быть лучший способ сделать это.

Надеюсь, в этом есть какой-то смысл, и спасибо!

Ответы [ 2 ]

1 голос
/ 23 марта 2011

Пожалуйста, взгляните на Lua сопрограммы , чтобы реализовать эту функциональность для сценариев игровых объектов. Идея состоит в том, чтобы выдать сопрограмму в упомянутых вами подпрограммах sleep () и waitforevent (), а затем возобновить позже (например, после истечения времени ожидания или события).

1 голос
/ 23 марта 2011

Используйте lua_sethook () .

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

...