Я делаю рекурсивный разбор.
В настоящее время у меня есть поддельный стек, в котором я храню состояния для своего конечного автомата, поэтому, когда я рекурсивно сверляю данные, я выдвигаю состояние, в котором находился, и высовываю его позже, после того как я закончу обработку рекурсивного бита текста.
Было бы быстрее иметь стек с идентификатором состояния, например:
int* stack = 0
int top = 0;
// ...
// drill down bit
if (stack == 0)
stack = (int*)malloc(STACK_JUMP_SIZE);
else if (top % STACK_JUMP_SIZE == 0)
stack = (int*)realloc(stack, (top+STACK_JUMP_SIZE) * sizeof(int));
stack[top++] = currentState;
// ...
// pop up later
{currentState = stack[--top]; {
if (top == 0) {
free(stack);
stack = 0;
} else if ((top+1) % STACK_JUMP_SIZE == 0) {
stack = (int*)realloc(stack, (top+1)*sizeof(int));
}
Или было бы быстрее разделить это на правильные функции и позволить C ++ беспокоиться о стеке.
(я знаю, что кто-то скажет мне: «это C, это не c ++», поэтому я с превентивным ответом отвечаю, моя программа c ++, но в ней много c).