Bruce.です。
T.Watanabe さんは書きました:
>> awkを256倍…で
>>
>> if HOGE
>> {
>> …
>> }
>>
>> if HOGE{
>> …
>> }
>>
>> と挙動が違う、つー指摘は、ショックでした。
>
> これホントですか? 本の方を確認しないでスクリプトを書いてみました。
>
> BEGIN {
> LIMIT = 10
>
> i = 0
> while ( i < 20 ) {
> print "devided --- " (devided( i ) ? i : " ")
> print "same_line --- " (same_line( i ) ? i : " ")
> i++
> }
> }
>
> function devided( num ) {
> if ( num > LIMIT )
> {
> return 1
> } else {
> return 0
> }
> }
>
> function same_line( num ) {
> if ( num > LIMIT ) {
> return 1
> } else {
> return 0
> }
> }
>
> MacOSX で
>
> /usr/bin/awk たぶんnawk
> /sw/bin/gawk Finkで入れたgawk
>
> の両方で試しましたけどまったく同じ動作になるんですけど…。(11から数
> 字が表示される。)これが
ソースを見てみました :)
gawk 3.1.6 なんで、256倍のもの(たぶん2.11か2.15あたり)とは違いますが、
if_statement
: LEX_IF '(' exp r_paren opt_nls statement
statement
: semi opt_nls
{ $$ = NULL; }
nls
: NEWLINE
| nls NEWLINE
;
opt_nls
: /* empty */
| nls
;
r_paren opt_nls statement のように、右カッコの直後に改行が来ても問題な
いように定義されています。
statementが空であることは許されていないので、右カッコに後続しているブ
ロックは
if の本体とみなされます。
256倍本でのバージョンのソースはすぐに出てこないのであとで。
言わずもがなですが
> パターン {
> アクション
> }
>
> のことであれば別の行に分離しちゃダメだと思うんですけど。
こっちは
rule
: pattern action
| pattern statement_term
statement_term
: nls
| semi opt_nls
;
なので、パターンの直後に改行が来ると、そこでルールが終わっているものと
解釈されます。
--
木村浩一/KIMURA Koichi
I thought what I'd do was, I'd pretend I was one of those deaf-mutes or
shoud I?
mail kbk at kt.rim.or.jp
web www.kt.rim.or.jp/~kbk/zakkicho/index.html