Пишу интерпретатор языков программирования. Текст переводится в лексемы. Потом из лексем строятся синтаксические конструкции основываясь на правилах вывода из нетерминалов. Так вот проблема - не могу придумать, как в Delphi замутить эффективную по скорости и памяти структуру данных для обработки рекурсивного спуска. Рекурсию не предлагать, это убожество.
Была идея очереди, в конец которой добавляетются все правые части правил вывода текущего раскрываемого нетерминала, а отработанное и не подошедшее из очереди удалять простым смещением указателя на начало очереди вправо. Но вложенность нетерминалов может быть большой (до 10) и правил вывода для каждого тоже может быть дофига, так что даже не знаю, как быть...
p.s. наверняка не все знакомы с тем, о чём я тут говорю. при надобности могу разъяснить.
Была идея очереди, в конец которой добавляетются все правые части правил вывода текущего раскрываемого нетерминала, а отработанное и не подошедшее из очереди удалять простым смещением указателя на начало очереди вправо. Но вложенность нетерминалов может быть большой (до 10) и правил вывода для каждого тоже может быть дофига, так что даже не знаю, как быть...
p.s. наверняка не все знакомы с тем, о чём я тут говорю. при надобности могу разъяснить.