Есть ли способ быстро преобразовать операторы в скрипте в вызовы функций? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть скрипт Lua 5.3 (эмулятор), который я хочу перенести в среду, используя Lua 5.2. Он использует побитовые операторы, которых нет в 5.2; вместо этого 5.2 использует функции для выполнения побитовых операций. Скрипт использует сотни этих операторов, и преобразование их вручную было бы утомительным. Есть ли способ преобразовать все операторы в файле в вызовы функций, соблюдая скобки и порядок операций? (Решение не обязательно должно быть на Lua; подойдет любой язык.)

Пример:

if mode == ROTATE_MODE_ROR then
    shifts = shifts & shift
    local shiftmask = (1 << shifts) - 1
    cf = (vr >> ((shifts - 1) & shift)) & 0x01
    vr = (vr >> shifts) | ((vr & shiftmask) << ((shift - shifts + 1) & shift))
    of = ((vr >> shift) ~ (vr >> (shift - 1))) & 0x01
elseif mode == ROTATE_MODE_ROL then
    shifts = shifts & shift
    cf = (vr >> ((shift - shifts + 1) & shift)) & 0x01
    vr = ((vr << shifts) & ((1 << (shift + 1)) - 1)) | (vr >> ((shift - shifts + 1) & shift))
    of = ((vr >> shift) ~ cf) & 0x01

преобразуется в:

if mode == ROTATE_MODE_ROR then
    shifts = bit32.band(shifts, shift)
    local shiftmask = bit32.lshift(1, shifts) - 1
    cf = bit32.band(bit32.rshift(vr, bit32.band((shifts - 1), shift)), 0x01)
    vr = bit32.bor(bit32.rshift(vr, shifts), bit32.lshift((bit32.band(vr, shiftmask), bit32.band((shift - shifts + 1), shift))))
    of = bit32.band(bit32.bxor(bit32.rshift(vr, shift), bit32.rshift(vr, (shift - 1))), 0x01)
elseif mode == ROTATE_MODE_ROL then
    shifts = bit32.band(shifts, shift)
    cf = bit32.band(bit32.rshift(vr, bit32.band((shift - shifts + 1), shift)), 0x01)
    vr = bit32.bor(bit32.band(bit32.lshift(vr, shifts), (bit32.lshift(1, (shift + 1)) - 1)), bit32.rshift(vr, bit32.band((shift - shifts + 1), shift)))
    of = bit32.band(bit32.bxor(bit32.rshift(vr, shift), cf), 0x01)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...