再帰的な構文解析を行っています。
現在、私は偽のスタックを持っており、有限状態マシンの状態を格納しているので、再帰的にドリルダウンするときに、現在の状態をプッシュし、再帰的なテキストの処理が終了した後でポップします。
次のような「状態ID」スタックを使用する方が高速でしょうか。
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が含まれています)。