Мне нужно иметь возможность обрабатывать данные, которые могут выглядеть следующим образом:
set setting1 "bind button_x +actionslot1;bind button_y \" bind button_x +stance \" "
bind button_a jump
set setting2 1 1 0 1
toggle setting_3 " \"value 1\" \"value 2\" \"value 3\" "
Вот как выглядят некоторые команды для консоли игры, и я пытаюсь написать своего рода эмулятор, который будет интерпретировать код так же, как игра.
Первое, что приходит на ум, это регулярное выражение, но я не уверен, что это лучший вариант. Например, при сопоставлении значения параметра я мог бы попробовать что-то вроде /set [\w_]+ "?(.+)"?/
, но подстановочный знак совпадает с конечной кавычкой, потому что она не ленивая, но если я сделаю ее ленивой, она будет соответствовать кавычке внутри значения. Если я сделаю его жадным и перестану сопоставлять кавычки, он не будет соответствовать экранированным кавычкам в значениях.
Даже если существуют возможные решения для регулярных выражений, они кажутся неправильным вариантом. Ранее я спрашивал о том, как такие программы, как Visual Studio и Notepad ++, знают, какие скобки и фигурные скобки соответствуют друг другу, и мне сказали, что в некоторых отношениях есть нечто похожее на регулярное выражение, но гораздо более мощное.
Единственное, о чем я могу думать, - это проходить строки кода за символом и использовать логические значения для определения этого состояния текущего символа.
Какие у меня есть варианты? Что разработчики игр используют для обработки команд консоли?
edit: Вот еще одна возможная команда, которая сильно удерживает меня от использования регулярных выражений:
set setting4 "bind button_a \" bind button_b "\" set setting1 0 \" " \" "
Команды включают не только экранированные кавычки, но и цитаты типа "\"
внутри экранированных кавычек.