質問: > > たとえば、**継続行**にマッチさせる方法について考えてみよう。データの仕様においては、複数の物理行が使われていても、改行文字の直前がバックスラッシュになっていれば、それら全体を一つの論理行とみなすようなものがよくある。 > > たとえば、次のようなものだ。 > > SFC=array.c builtin.c eval.c field.c gawkmisc.c io.c main.c / > > missing.c msg.c node.c re.c version.c > > > 詳説正規表現172pより この変数?らしき英文の中に**物理行**、**継続行**、**論理行**があるみたいですが、具体的にどの部分のことを言っているのでしょうか。 また論理行や物理行について調べてみると、8~12年前の情報ではありますが、論理行が、改行コードを使って**改行すれば**、行が一個作れて、物理行は、改行コードを使わずにエンターキーなどで改行すれば一行作れる、という風な記述がありました。 一方で**定義が曖昧である**と記述してあるところもあり、質問することにしました。 **物理行**、**継続行**、**論理行**とはいったい何なのでしょうか。
回答: 「論理行と物理行」は様々な文脈でそれぞれ意味が異なるので、違う文脈での説明文を見ても無意味です。 文脈1: 質問でお書きのような、「(プログラミング言語などで)文法上1行で書かないといけないものを、2行に分けて書きたい」ケース。 改行文字で区切られた物が物理行で、その物理行を行継続記号で繋いだ物が、論理行です。 行継続記号は言語により色々。質問文だとバックスラッシュとのことですね。 もちろん、行継続記号が無い場合は、物理行=論理行です。 論理行が複数物理行からなるときに、2物理行目以降の物理行を、継続行と言います。 バックスラッシュを行継続記号とすると、 ``` A=0 ・・・・1物理行目、1論理行目 B=1+ \ ・・・・2物理行目、2論理行目 2 ・・・・3物理行目、2論理行目で継続行 ``` ( ・・・以降は説明文です。実際にはバックスラッシュは行末にある。) Cのような改行が文法上の区切りの意味を持たない言語だと、物理行・論理行・継続行という概念は無いです。 文脈2: エディタ画面で、画面サイズ/ウィンドウサイズより長い行を折り返して表示するケース。 改行文字で区切られた物が論理行で、画面上の行が物理行です。 ウィンドウサイズが幅20文字の場合: ``` one two three. ``` このウィンドウサイズを幅10文字に変更すると、10文字で折り返されるが、改行文字がテキストに挿入されるわけでは無い。 ``` one two th ree. ``` 単純に幅で折り返すエディタもあるし、折り返している事が目で見えるようになっているエディタもあります。