Я реализую интерпретатор для умеренно простого языка программирования, подобного Pascal/BASIC, в Android. Я закончил синтаксический анализатор, поэтому программы распознаются, загружаются в память и готовы к выполнению. Язык является процедурным, эмулирует ввод/вывод командной строки и, очевидно, не управляется событиями, как Java в Android.
Пример программы может выглядеть так:
FOR i FROM 1 TO 10
READ Name
PRINT "User ", i, " name: ", Name
END_LOOP
Будучи относительно новым для Android, я не знал, что диалоги Android асинхронны и, следовательно, не могут прерывать выполнение, как объясняется в десятках подобных вопросов. (1), (2), (3), (4)
Итак, я сначала подумал Я бы реализовал команды READ
, показав модальный диалог. Выполнение кода, который включает чтение ввода от пользователя, требует дождаться его завершения, прежде чем переходить к следующей строке кода. Но это не должно быть сделано с диалогом, как было сказано в сообщениях выше.
Я понял, что наиболее «подходящим» способом было бы «сохранить» состояние выполнения всей программы, остановить выполнение, а затем начать выполнение, загрузив последнее состояние, когда пользователь вводит что-то из диалогового окна. Но это кажется невозможным и слишком хлопотным для такой простой задачи. Есть ли более простой способ?
Любые предложения приветствуются.