>>849
あのな、そのレベルのものを、再起だとかループだとかいう時点でおかしいと気づけ。

例えば、
parseDoc(lpStr) {
  :
 みたいな関数で、while(...)で、strが尽きるまでループしている中で、
 if(cmd=="eval") lpStr=parseDoc(lpStr);

 みたいに使えば、あ、同じ構造を処理してるんだな、終わったらポインタが進むんだなって一目でわかるでしょ。
これを理解した上で、勝手スタックに今のポインタ値保存して、必要なら変数も保存して、終わったら戻す、みたいな処理のほうが良いなら、説明してほしいわ。

あと関数数百行はおかしいから。
80行〜120行でも長大関数。