BF->JSのトランスレータを書いたけどおかしなことになっていた - by shigemk2の続き。
@shigemk2 たとえば以下のプログラムをインタプリタとトランスレータの両方で試すと、後者は入力待ちの前に$が表示されず、次から$が`に変化すると思います。bufが空だと毎回先頭に戻るためです。 ++++++[>++++++<-]+[>.>,.<<]
— 七誌 (@7shi) 2014, 7月 25
@shigemk2 こんな感じのコードが出力できれば良いと思います。 https://t.co/RTTgv6sqMR
— 七誌 (@7shi) 2014, 7月 27
— 炭鉱ハッカー shigemk2 (@shigemk2) 2014, 7月 27
- 処理が中断された場合、ループ処理を最初から始めると期待した文字が出力されないので、ループを途中から再開する必要がある
- process.stdin.onの中にgetchar関数を挟まないと、次の標準出力で改行が出力されるバグが発生してしまう
- Node.jsの標準入出力の処理は非同期なのでループの中で複数の非同期処理を実行することは難しい(コールバック地獄)
- goto文のようなことをやろうと思ったけど、ループの中にジャンプするgoto文は基本的にやらない
- JSにyield的なものはない
- ループの中から再開するためには、スタックを利用した配列を用意してやる必要がある
- [の場合、配列にpush=スタックを利用して特定の場所からループを再開する技術を再現する
- ]の場合、ループを閉じてスタックを減らす
- hascomma配列で、どこからループが始まり、どこに,があって、どこでループが終わるのか記録させる
参考になりました。というか結構お手をお借りしました。すみません。