Yash 2 その 280: 本当に悩ましい単語展開バグ
間が空いてしまったが、前回の続き。
このバグを修正するにあたって、引用符をどう扱ふかをよく考へないといけない。前回の記事の通り、単語の中の引用符は引用符除去によって消されることになってゐるので、それまでは引用符が単語の中に残ってゐなければならない。しかし今の yash の実装では、四種展開の段階で引用符はバックスラッシュエスケープに置換される。この設計だと、中身が空の引用符が置換の際に消え去ってしまふ。これは、単語内に複数の引用符がある場合に特に問題となる。単語分割の際にいくつの空の単語を残せばよいのか判別がつかない。
space=' '; : ''$space$space'' ''$space''$space''
このコマンドラインではコロン組込みコマンドへの引数は五つの空文字列となるはずだが、今の実装ではどちらの単語の単語分割においても単語分割関数への入力は $space$space
(引用符無し) と同一なので結局単語は一つも生成されない。
愚直に、単語分割関数への入力に引用符を含めるやうにすることもできるが、するとブレース展開と単語分割で引用符を特殊な文字として扱はなくてはならない。なるべくそれは避けたいところだ。
今のところうまいアイディアは思ひ付かない。
| 固定リンク
コメント
結局、「単語分割関数への入力に引用符を含めるやうにする」の方針で行くことになりさう。結構トリッキーだが、ブレース展開と単語分割での引用符の扱ひを今とほとんど変へずに済む見込み。
投稿: まじかんと | 2016年3月 1日 (火) 00時15分