From: matz@... (Yukihiro Matsumoto) Date: 2002-06-16T00:07:51+09:00 Subject: [ruby-dev:17454] Re: ternary operator and char literal (Re: parse error with `true || break ? 0 : 1' (PR#261)) まつもと ゆきひろです In message "[ruby-dev:17446] ternary operator and char literal (Re: parse error with `true || break ? 0 : 1' (PR#261))" on 02/06/15, nobu.nakada@nifty.ne.jp writes: |> そもそも EXPR_MID とは何かというのがよくわかっていないんですが、たぶん、 |> 中置演算子が意味のない文脈を表現しているのだと思います。break の場合に |> ついていえば、中置演算子の左辺が break だと、左辺の評価中に制御が外に |> 出てしまい、中置演算子の機能が動作しないからでしょう。 EXPR_MIDというのは「改行が意味がある」文脈です。つまり、 return 12 が2文として解釈される文脈です。これがたとえばifだとEXPR_BEG なので、 if true はifとtrueの間の改行は分の区切りではなく単なる空白として解釈 されます。 |どちらかというと、?のリテラルで空白を禁止したほうが直観的なよう |な気がします。必要なら`?\ 'とできますし。 そうですね。「?\s」を提案し、現状「? 」を使っているものにつ いては警告を出すようにしたいと思います。 |それと、こういうのも一見して分かりにくいと思うので、二文字以上 |の単語の先頭の?はリテラルとみなさないほうが良いのでは。 | | p ?aif true #=> 97 賛成。コミットしてください。 |ついでに、ソースと別ディレクトリでコンパイルしていると、 |keywordsを変更しても$(srcdir)/lex.cが読み込まれてしまって、変更 |が反映されません。 #include にすると解決するんでしたっけ?