Mercurial > libguess
diff dfa.c @ 3:70e2c306231e
- implemented dfa utility functions.
- added dfa.c.
- rewrote guess functions for ar, gr, hw and tr scripts with dfa utilities.
- guess functions for cjk scripts too.
author | Yoshiki Yazawa <yaz@cc.rim.or.jp> |
---|---|
date | Thu, 12 Jun 2008 20:20:43 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dfa.c Thu Jun 12 20:20:43 2008 +0900 @@ -0,0 +1,61 @@ +#include "libguess.h" +#include "dfa.h" + +boolean +dfa_alone(guess_dfa *dfa, guess_dfa *order[]) +{ + int i; + + if (dfa->state < 0) + return FALSE; + + for (i = 0; order[i] != NULL; i++) { + if (order[i] != dfa && order[i]->state >= 0) { //DFA_ALIVE() + return FALSE; + } + } + + return TRUE; +} + +boolean +dfa_none(guess_dfa *order[]) +{ + int i; + + for (i = 0; order[i] != NULL; i++) { + if (order[i]->state >= 0) { //DFA_ALIVE() + return FALSE; + } + } + + return TRUE; +} + +guess_dfa * +dfa_top(guess_dfa *order[]) +{ + int i; + guess_dfa *top = NULL; + for (i = 0; order[i] != NULL; i++) { + if (order[i]->state >= 0) { //DFA_ALIVE() + if (top == NULL || order[i]->score > top->score) + top = order[i]; + } + } + return top; +} + +const char * +dfa_process(guess_dfa *order[], int c) +{ + int i; + for (i = 0; order[i] != NULL; i++) { + if (DFA_ALIVE_P(order[i])) { + if (dfa_alone(order[i], order)) + return order[i]->name; + DFA_NEXT_P(order[i], c); + } + + } +}