[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mgp-users-jp 00446] Re: bugs (?) in mgp2ps



お世話になります。

>>>>> Atsushi Onoe <onoe@sm.sony.co.jp> writes:

> あるいは、
> 	env YACC=yacc LEX=lex ./configure
> で yacc/lex を使ってみても良いかも知れません。

結論から先に言いますと、
Solaris2.4, gcc 2.7.2.2.f, SUN の lex と yacc で動きました。
flex 2.4.6 や bison 1.22 (いずれも 94 年にコンパイル)の
どちらか一方でも使うと駄目でした。
OS といい、ツールといい、うちの環境の浦島度が露呈された一件でありました。

ただし、、、、
1.04a は、lex -t ./scanner.l > scanner.c が実行できませんでした。ううむ。

ついでですが、

>> その yyerror() でメッセージが出力された後に、止まります。

> 手元に flex-2.4.* は無いのですが、YY_INPUT の仕様が違うのかな?
> 少なくとも flex-2.5.4 では YY_INPUT(buf, result, max_size) で
> result に 0 を返すと EOF を意味します。

> mgp の scanner.l ではこれを上書きしていますが、'\0' を返すことは
> 無いはずなので、'\0' で invalid charactor になることは無いように
> 見えます。

私の説明が中途半端でした。私が先程、

> いずれの場合も、yyerror() でのメッセージの後に、
> YY_INPUT マクロが1回実行されて、そのあとで停止しているようです。

と言ったのは、「YY_INPUT の実行の直後に止まる」という意味ではなく、
「yyerror() の後で YY_INPUT で result に 0 が入って、しばらくした後に、
  次に YY_INPUT を実行する場面に遭遇することなく、止まる」という
単なる時間関係について触れたのでした。

それはともかく、YY_INPUT については、
scanner.l で上書きされているものがそのまま使用されていました。
つまり、YY_INPUT によってヌル文字が yytext に入れられてるのではなくて、
空になったはずの yytext をまだ使い回している、という印象です。
(印象で話をしてもしょうがないかも)

  〜  〜  〜  〜

話はまた変わりまして、(あまり本質的な話ではありません)
snap-990208 では ctlwords.h が ctlwords.c で作られてますが、
これが返り値を返していません。
このため、終了ステータスが 0 にならず、make が最初に必ず fail します。

もしかして、これもウチだけでしょうか???
______________________________________________________
川端@情報工.広島市大 <kawabata@ce.hiroshima-cu.ac.jp>