Skip to content

Commit

Permalink
Update state machine.
Browse files Browse the repository at this point in the history
  • Loading branch information
karino2 committed Dec 20, 2018
1 parent c868b76 commit 2c31bad
Showing 1 changed file with 14 additions and 5 deletions.
19 changes: 14 additions & 5 deletions arm_asm.md
Original file line number Diff line number Diff line change
Expand Up @@ -2865,8 +2865,6 @@ End with back slash. \

ダブルクオートの前にバックスラッシュがあると閉じ記号じゃないけれど、ダブルクオートの前の前もバックスラッシュなら閉じ記号だけどダブルクオートの前の前の前もバックスラッシュだったらやっぱり閉じ記号じゃなくなる訳です。

なお、以上のパターンは全部Unit Testに加えておいてください(英文はもっと短くていいです)。

いやいや、後ろからたどるから面倒なんだよ、というのはその通りで、前から数えていけばいいんですよね。
毎回バックスラッシュがあったら次の文字は特別処理をする。
そうで無ければいつも通りの処理をする。
Expand Down Expand Up @@ -2906,14 +2904,25 @@ End with back slash. \
別にライブラリとかそういうC言語の機能がある訳じゃありません。
ではなんでプログラムの話でたびたび出てくるかというと、

1. 直接コードを書くのは難しい問題でステートマシーンの遷移図は簡単に書ける事がある
2. 遷移図を実装するのは簡単
3. 遷移図が実装されたコードから遷移図を戻すのも簡単(書いた人が約束を守っていれば)
1. 直接コードを書くのは難しいが、ステートマシーンの遷移図は簡単に書ける、という問題が結構ある
2. 遷移図を書いてしまえば、それを実装するのは簡単
3. 遷移図が実装されたコードから読んでる人が遷移図を復元するのも簡単(書いた人が約束を守っていれば)

という事があるからです。

そして文字列リテラルのパースはこのステートマシーンで簡単に書ける事の例となっています。
(その他だと正規表現とかは有名)。

ステートマシーンが実装されてるソースコードがばーんとあった時、
ステートマシーンの遷移図を書いて実装した経験があって、
「これはステートマシーンです」とかコメントなり関数名なりから判別出来れば、
さらさらっと遷移図を書いて理解出来る。

でもやった事無い人はなんだか分からんコードがだらだら続いていて、いちいち各状態を解読していく必要があって、それでは読むのが遅い。

なのでC言語プログラマはステートマシーンに慣れておく方が良いです。
C言語プログラマ以外でもステートマシーンは出てくるのですが、C言語が用途の都合から一番良く出てくる気がする。

### 文字列リテラルのパースの遷移図を考える

最初は初期状態とします。そこからダブルクオートを読むと文字の中、というステートに移動します。
Expand Down

0 comments on commit 2c31bad

Please sign in to comment.