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

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



自己フォローしておきます。

>>>>> KAWABATA Hideyuki <kawabata@arch.ce.hiroshima-cu.ac.jp> writes:

> 当方、SPARC マシンの上の Solaris 2.4 あるいは Solaris 2.5.1 で、
>    gcc 2.7.2.2, bison 1.22, flex 2.4.6
> でコンパイルしてみたのですが、いずれにおいても、
> mgp2ps の出力(標準出力)の先頭に、数十個のヌル文字が入るのです。

ちなみに mgp のバージョンは 'mgp version 1.04a (980906)' です。

> 少しソースを見たところ、
> parse.c 内の read_rc() や read_file() における yyparse() の
> 呼び出しの際に、ときどきヌル文字が出るようです。

どうも、ヌル文字は yylex() の中のデフォルトのアクションで
出力されているようです。ので、
とりあえず対症療法として、以下の2つの解決策が考えられます。

どちらにしろ、根本的な解決にはなっていないかもしれませんが、
とりあえず報告しておきます。御参考まで。
______________________________________________________
川端@情報工.広島市大 <kawabata@ce.hiroshima-cu.ac.jp>


●方法1:scanner.l の ECHO を無理矢理定義しておく。
(flex を使った場合、ECHO が fwrite() になり、ヌル文字でも出力するので)

*** scanner.l.orig	Fri Sep  4 18:00:43 1998
--- scanner.l	Tue Feb  9 18:22:33 1999
***************
*** 61,66 ****
--- 61,68 ----
  static int stoi __P((char *));
  static inline int xdtoi __P((int));
  
+ #define ECHO (void) fputs(yytext, yyout)
+ 
  #ifdef FLEX_SCANNER
  #define YY_NO_UNPUT
  #undef YY_INPUT


●方法2:scanner.l で、パターンマッチングから漏れたものを無視する。
(つまり、ヌル文字などは無視させる)

*** scanner.l.orig	Fri Sep  4 18:00:43 1998
--- scanner.l	Tue Feb  9 18:24:38 1999
***************
*** 161,166 ****
--- 161,167 ----
  				yylval.s[strlen(yylval.s) - 1] = '\0';
  			return STR;
  		}
+ .		;
  %%
  
  void