Mercurial > freewnn
comparison Wnn/jserver/renbn_kai.c @ 25:466fe6732d8d
- fixed more NULL pointer related errata
- suppress warnings
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Sat, 06 Mar 2010 04:37:31 +0900 |
parents | ed4bb01eb317 |
children |
comparison
equal
deleted
inserted
replaced
24:becc60787557 | 25:466fe6732d8d |
---|---|
23 * You should have received a copy of the GNU General Public License | 23 * You should have received a copy of the GNU General Public License |
24 * along with this program; if not, write to the Free Software | 24 * along with this program; if not, write to the Free Software |
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
26 */ | 26 */ |
27 | 27 |
28 static char rcs_id[] = "$Id: renbn_kai.c,v 1.4 2002/09/01 17:13:11 hiroo Exp $"; | |
29 | |
30 #ifdef HAVE_CONFIG_H | 28 #ifdef HAVE_CONFIG_H |
31 # include <config.h> | 29 # include <config.h> |
32 #endif | 30 #endif |
33 | 31 |
34 /* #include <stdio.h> */ /* for debug only */ | 32 /* #include <stdio.h> */ /* for debug only */ |
119 /* 1 文節決定可能になるまでノードを作る */ | 117 /* 1 文節決定可能になるまでノードを作る */ |
120 if (kaidbno == 1) | 118 if (kaidbno == 1) |
121 { | 119 { |
122 /* 各文節の評価値の足し算(son_v)は、mknode でやるんだけど kaidbno が 1 | 120 /* 各文節の評価値の足し算(son_v)は、mknode でやるんだけど kaidbno が 1 |
123 つまり 1文節解析の場合は、そこを通らないからここでやろう */ | 121 つまり 1文節解析の場合は、そこを通らないからここでやろう */ |
124 for (brbzdptr = rbzdptr->lnk_br; brbzdptr != 0; brbzdptr = brbzdptr->lnk_br) | 122 for (brbzdptr = rbzdptr->lnk_br; brbzdptr != NULL; brbzdptr = brbzdptr->lnk_br) |
125 brbzdptr->son_v = brbzdptr->v_jc; | 123 brbzdptr->son_v = brbzdptr->v_jc; |
126 } | 124 } |
127 else | 125 else |
128 { | 126 { |
129 while ((int) (rbzdptr->kbcnt) < kaidbno && rtmknode > 0) | 127 while ((int) (rbzdptr->kbcnt) < kaidbno && rtmknode > 0) |
149 } | 147 } |
150 } | 148 } |
151 } | 149 } |
152 | 150 |
153 /* 最大の評価を持つノードを見つける */ | 151 /* 最大の評価を持つノードを見つける */ |
154 for (brbzdptr = rbzdptr->lnk_br, maxbzd = rbzdptr; brbzdptr != 0; brbzdptr = wkbzdptr) | 152 for (brbzdptr = rbzdptr->lnk_br, maxbzd = rbzdptr; brbzdptr != NULL; brbzdptr = wkbzdptr) |
155 { | 153 { |
156 wkbzdptr = brbzdptr->lnk_br; | 154 wkbzdptr = brbzdptr->lnk_br; |
157 if (maxbzd->son_v <= brbzdptr->son_v) | 155 if (maxbzd->son_v <= brbzdptr->son_v) |
158 { | 156 { |
159 clr_node (maxbzd); /* garbage collection */ | 157 clr_node (maxbzd); /* garbage collection */ |
225 wnn_errorno = WNN_FZK_FILE_NO_LOAD; | 223 wnn_errorno = WNN_FZK_FILE_NO_LOAD; |
226 return (-1); | 224 return (-1); |
227 } | 225 } |
228 ft = (struct FT *) files[c_env->fzk_fid].area; | 226 ft = (struct FT *) files[c_env->fzk_fid].area; |
229 | 227 |
230 rbzdptr = 0; | 228 rbzdptr = NULL; |
231 _status = 0; | 229 _status = 0; |
232 if (chk_yomi_endvect (yomi_sno, yomi_eno, endvect, endvect1) < 0) | 230 if (chk_yomi_endvect (yomi_sno, yomi_eno, endvect, endvect1) < 0) |
233 return (-1); | 231 return (-1); |
234 if (dbn_kai (yomi_sno, yomi_eno, beginvect, | 232 if (dbn_kai (yomi_sno, yomi_eno, beginvect, |
235 #ifndef NO_FZK | 233 #ifndef NO_FZK |
240 init_work_areas (); | 238 init_work_areas (); |
241 return (-1); /* ERROR */ | 239 return (-1); /* ERROR */ |
242 } | 240 } |
243 | 241 |
244 /* 最大の評価値を持つノードを見つける */ | 242 /* 最大の評価値を持つノードを見つける */ |
245 for (brbzdptr = rbzdptr, maxbzd = 0; brbzdptr != 0; brbzdptr = wkbzdptr) | 243 for (brbzdptr = rbzdptr, maxbzd = NULL; brbzdptr != NULL; brbzdptr = wkbzdptr) |
246 { | 244 { |
247 wkbzdptr = brbzdptr->lnk_br; | 245 wkbzdptr = brbzdptr->lnk_br; |
248 if (brbzdptr->j_c == yomi_eno - 1) | 246 if (brbzdptr->j_c == yomi_eno - 1) |
249 { /* 文節長さ */ | 247 { /* 文節長さ */ |
250 if (maxbzd == NULL) | 248 if (maxbzd == NULL) |
315 wnn_errorno = WNN_FZK_FILE_NO_LOAD; | 313 wnn_errorno = WNN_FZK_FILE_NO_LOAD; |
316 return (-1); | 314 return (-1); |
317 } | 315 } |
318 ft = (struct FT *) files[c_env->fzk_fid].area; | 316 ft = (struct FT *) files[c_env->fzk_fid].area; |
319 | 317 |
320 rsbnptr = 0; | 318 rsbnptr = NULL; |
321 _status = 0; | 319 _status = 0; |
322 if (chk_yomi_endvect (yomi_sno, yomi_eno, endvect, endvect1) < 0) | 320 if (chk_yomi_endvect (yomi_sno, yomi_eno, endvect, endvect1) < 0) |
323 return (-1); | 321 return (-1); |
324 if (sbn_kai (yomi_sno, yomi_eno, endvect, endvect1, &rsbnptr, 1, 0) < 0) | 322 if (sbn_kai (yomi_sno, yomi_eno, endvect, endvect1, &rsbnptr, 1, NULL) < 0) |
325 { | 323 { |
326 init_work_areas (); | 324 init_work_areas (); |
327 return (-1); /* ERROR */ | 325 return (-1); /* ERROR */ |
328 } | 326 } |
329 | 327 |
330 /* 最大の評価値を持つノードを見つける */ | 328 /* 最大の評価値を持つノードを見つける */ |
331 for (brsbnptr = rsbnptr, maxsbn = 0; brsbnptr != 0; brsbnptr = wksbnptr) | 329 for (brsbnptr = rsbnptr, maxsbn = NULL; brsbnptr != NULL; brsbnptr = wksbnptr) |
332 { | 330 { |
333 wksbnptr = brsbnptr->lnk_br; | 331 wksbnptr = brsbnptr->lnk_br; |
334 if (brsbnptr->j_c == yomi_eno - 1) | 332 if (brsbnptr->j_c == yomi_eno - 1) |
335 { /* 文節長さ */ | 333 { /* 文節長さ */ |
336 if (maxsbn == NULL) | 334 if (maxsbn == NULL) |
376 if (maxsbn == NULL) | 374 if (maxsbn == NULL) |
377 { | 375 { |
378 if (set_kata_giji_sbn (yomi_sno, yomi_eno, endvect, endvect1, &maxsbn) < 0) | 376 if (set_kata_giji_sbn (yomi_sno, yomi_eno, endvect, endvect1, &maxsbn) < 0) |
379 return (-1); | 377 return (-1); |
380 } | 378 } |
381 if (maxsbn->jentptr == 0 && maxsbn->status == WNN_NOT_CONNECT) | 379 if (maxsbn->jentptr == NULL && maxsbn->status == WNN_NOT_CONNECT) |
382 maxsbn->status = WNN_GIJI; | 380 maxsbn->status = WNN_GIJI; |
383 sbn_cnt = cnt_syo (maxsbn); | 381 sbn_cnt = cnt_syo (maxsbn); |
384 if ((*dsd_sbn = get_dsd_sbn (sbn_cnt)) == NULL) | 382 if ((*dsd_sbn = get_dsd_sbn (sbn_cnt)) == NULL) |
385 { | 383 { |
386 init_work_areas (); | 384 init_work_areas (); |
402 struct DSD_DBN *nextp; | 400 struct DSD_DBN *nextp; |
403 #ifdef CONVERT_from_TOP | 401 #ifdef CONVERT_from_TOP |
404 struct DSD_DBN *dsd_dbn_head; | 402 struct DSD_DBN *dsd_dbn_head; |
405 struct BZD *s_bzd; /* Buffer son's bzd */ | 403 struct BZD *s_bzd; /* Buffer son's bzd */ |
406 dsd_dbn_head = dsd_dbn; | 404 dsd_dbn_head = dsd_dbn; |
407 while (bzd != 0) | 405 while (bzd != NULL) |
408 { | 406 { |
409 nextp = dsd_dbn++; | 407 nextp = dsd_dbn++; |
410 nextp->bun_m = bzd->bend_m; | 408 nextp->bun_m = bzd->bend_m; |
411 nextp->bun_jc = bzd->j_c; | 409 nextp->bun_jc = bzd->j_c; |
412 nextp->sbncnt = bzd->sbn_cnt; | 410 nextp->sbncnt = bzd->sbn_cnt; |
422 freebzd (bzd); | 420 freebzd (bzd); |
423 bzd = s_bzd; | 421 bzd = s_bzd; |
424 } | 422 } |
425 return (dsd_dbn_head); | 423 return (dsd_dbn_head); |
426 #else /* CONVERT_from_TOP */ | 424 #else /* CONVERT_from_TOP */ |
427 if (bzd == 0) | 425 if (bzd == NULL) |
428 return (dsd_dbn); | 426 return (dsd_dbn); |
429 nextp = dcdbn_set (dsd_dbn, dsd_sbn, bzd->lnk_son); | 427 nextp = dcdbn_set (dsd_dbn, dsd_sbn, bzd->lnk_son); |
430 nextp->bun_m = bzd->bend_m; | 428 nextp->bun_m = bzd->bend_m; |
431 nextp->bun_jc = bzd->j_c; | 429 nextp->bun_jc = bzd->j_c; |
432 nextp->sbncnt = bzd->sbn_cnt; | 430 nextp->sbncnt = bzd->sbn_cnt; |
444 | 442 |
445 static struct DSD_SBN * | 443 static struct DSD_SBN * |
446 dcdsbn_set (struct DSD_SBN *dsd_sbn, | 444 dcdsbn_set (struct DSD_SBN *dsd_sbn, |
447 struct SYO_BNSETSU *sbn) | 445 struct SYO_BNSETSU *sbn) |
448 { | 446 { |
449 if (sbn == 0) | 447 if (sbn == NULL) |
450 return (dsd_sbn); | 448 return (dsd_sbn); |
451 #ifdef CONVERT_from_TOP | 449 #ifdef CONVERT_from_TOP |
452 dsd_sbn = dcdsbn_set (dsd_sbn, sbn->parent); | 450 dsd_sbn = dcdsbn_set (dsd_sbn, sbn->parent); |
453 #endif /* CONVERT_from_TOP */ | 451 #endif /* CONVERT_from_TOP */ |
454 dsd_sbn->bun_m = sbn->bend_m; | 452 dsd_sbn->bun_m = sbn->bend_m; |
472 static int | 470 static int |
473 cnt_syo (struct SYO_BNSETSU *sbn) | 471 cnt_syo (struct SYO_BNSETSU *sbn) |
474 { | 472 { |
475 int cnt; | 473 int cnt; |
476 cnt = 0; | 474 cnt = 0; |
475 | |
477 while (sbn) | 476 while (sbn) |
478 { | 477 { |
479 cnt++; | 478 cnt++; |
480 sbn = sbn->parent; | 479 sbn = sbn->parent; |
481 } | 480 } |
561 log_err ("tan_syo(): cannot make tanbunsetu kouho."); | 560 log_err ("tan_syo(): cannot make tanbunsetu kouho."); |
562 return (-1); | 561 return (-1); |
563 } | 562 } |
564 } | 563 } |
565 | 564 |
566 if ((*sbn = getsbnsp ()) == 0) | 565 if ((*sbn = getsbnsp ()) == NULL) |
567 return (-1); | 566 return (-1); |
568 | 567 |
569 (*sbn)->j_c = yomi_eno - 1; | 568 (*sbn)->j_c = yomi_eno - 1; |
570 (*sbn)->i_jc = getfzkoh (ichbnpbp, tempi)->offset + yomi_sno; | 569 (*sbn)->i_jc = getfzkoh (ichbnpbp, tempi)->offset + yomi_sno; |
571 (*sbn)->bend_m = yomi_sno; | 570 (*sbn)->bend_m = yomi_sno; |
572 (*sbn)->v_jc = 0; | 571 (*sbn)->v_jc = 0; |
573 (*sbn)->jentptr = 0; | 572 (*sbn)->jentptr = NULL; |
574 (*sbn)->t_jc = WNN_KATAKANA; | 573 (*sbn)->t_jc = WNN_KATAKANA; |
575 (*sbn)->kangovect = ft->kango_hinsi_area[giji_no]; | 574 (*sbn)->kangovect = ft->kango_hinsi_area[giji_no]; |
576 (*sbn)->hinsi_fk = giji_no; | 575 (*sbn)->hinsi_fk = giji_no; |
577 (*sbn)->status = WNN_GIJI; | 576 (*sbn)->status = WNN_GIJI; |
578 (*sbn)->status_bkwd = connect_flg; | 577 (*sbn)->status_bkwd = connect_flg; |
587 int endvect, /* 終端ベクタ */ | 586 int endvect, /* 終端ベクタ */ |
588 int endvect1, /* 終端ベクタ */ | 587 int endvect1, /* 終端ベクタ */ |
589 struct BZD **bzd, | 588 struct BZD **bzd, |
590 int buncnt) | 589 int buncnt) |
591 { | 590 { |
592 if ((*bzd = getbzdsp ()) == 0) | 591 if ((*bzd = getbzdsp ()) == NULL) |
593 return (-1); | 592 return (-1); |
594 if (set_kata_giji_sbn (yomi_sno, yomi_eno, endvect, endvect1, &(*bzd)->sbn) < 0) | 593 if (set_kata_giji_sbn (yomi_sno, yomi_eno, endvect, endvect1, &(*bzd)->sbn) < 0) |
595 return (-1); | 594 return (-1); |
596 (*bzd)->j_c = yomi_eno - 1; | 595 (*bzd)->j_c = yomi_eno - 1; |
597 (*bzd)->bend_m = yomi_sno; | 596 (*bzd)->bend_m = yomi_sno; |