IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

空のルールがあるとき、どうしよう

こんなやつがあったら

maybe_space:
    /* Empty */
  | maybe_space WHITESPACE
  ;

どうしようどうしよう。
考えながら書く

使うときは

hoge:
    maybe_space fuga
  | piyo
  ;

fuga: '1';
piyo: '0';

みたいな感じ

たとえば

パーサの状態が以下のような感じだったら

. maybe_space fuga
. piyo

WHITESPACE トークンが来たら

maybe_space . fuga

こうなる
'0' トークンが来たら

'0' .

こうなる
他のが来てたら、そのトークンに行く前に maybe_space をリデュースすればいいのか。

ってことは、

先読みが必要だな。
次が空のルールの可能性がある場合は先読みが必要
ほんとかなあ。おい

違うっぽいなあ

そもそもいままでのやり方だったら

maybe_space:
    /* Empty */
  | maybe_space WHITESPACE
  ;

の最初のトークンとか分からんな
あ、違う違う混乱してきた