Я передаю литерал таблицы lua в строке из веб-приложения в PICO-8, который я пытаюсь десериализовать обратно в таблицу lua в PICO-8.
Строка имеет вид '{"top", {"one", {"one a", "one b"}}, {"two", {"two a", "two b"}}}'
Чтобы упростить задачу, я собираюсь включать в строки только строчные символы, а во вложенных таблицах разрешены только строки.
Я чувствую, что разбираюсь в парсинге символов, но не знаю, как отслеживать, где я нахожусь в воссозданных данных, как глубину структуры, так и индекс.
Как это обычно делается?
Загвоздка в том, что поскольку PICO-8 lua не содержит load
или loadstring
, синтаксический анализ должен выполняться вручную. В следующем коде используются table.insert
и string.sub
вместо эквивалентов PICO-8, потому что я использую lua REPL для создания прототипа этого кода.
Вот что у меня есть с операторами печати, что я думаю, что мне нужно делать и где.
Любая помощь будет принята с благодарностью.
test_obj = {"top", {"one", {"one a", "one b"}}, {"two", {"two a", "two b"}}}
data_string = '{"top", {"one", {"one a", "one b"}}, {"two", {"two a", "two b"}}}'
data = nil
string = ''
level = 0
while #data_string > 0 do
local d=string.sub(data_string,1,1)
if stringChar(d) then
string = string..d
end
if comma(d) then
print(string)
table.insert(data, string)
string = ''
end
if openBracket(d) then
if data == nil then
data = {}
print('new table')
else
print('insert table')
end
level = level + 1
print('on level', level)
end
if closeBracket(d) then
print('end of table')
level = level - 1
print('up to level', level)
end
data_string=string.sub(data_string,2)
end