完:「bogus」をエミュレートしたければ皿まで

結局自作しかなかった…。


完成版は bitbucket snippet として貼り付けた。shlex.split みたいにリダイレクト・パイプの解読はしてないので、完全とは言えないけれど、アタシの目的には耐える。

完全に「文字指向」のパースなので、多分本気用途なら Cython 化するなりしないと、性能的に危ういだろうね。

パースのポイントは実際はこれだけ:

  1. カレット(「^」) が、Unix/C 流儀のエスケープに「似たもの」。
  2. 二重引用符は、始まればシンプルに相手を探すだけ。カレットの存在なんか知らない。
  3. アンバランスだろうが知ったことではない。二重引用符が始まったモードで閉じずに終わるのは「二重引用符に囲まれている」のとほぼ同じとみなす。

この「トンデモ」仕様こそが、「正しい cmd.exe の振る舞いのエミュレート」。要するに「厳密な処理を行う lexer/parser」を書いたり使ったり出来ない。

「二重引用符が始まったのに終わらない」ケースは、「囲まれてるのと同じ扱い」なのにも関わらず、開始の二重引用符が残る。どうしてくれるんだ、と思うのだが、ほんとこれは cmd.exe 利用者の自己責任の範疇ではあるので、悔しいけど放置するしかない。どうしようもないものこんなん。

こういうアンバランスを許して世界をダメにしたもう一つが html ね。誰も得しないんだってば、こんなん。