| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- #!/bin/sh
- ###########################################################################
- ## ##
- ## Language Technologies Institute ##
- ## Carnegie Mellon University ##
- ## Copyright (c) 2001-2008 ##
- ## All Rights Reserved. ##
- ## ##
- ## Permission is hereby granted, free of charge, to use and distribute ##
- ## this software and its documentation without restriction, including ##
- ## without limitation the rights to use, copy, modify, merge, publish, ##
- ## distribute, sublicense, and/or sell copies of this work, and to ##
- ## permit persons to whom this work is furnished to do so, subject to ##
- ## the following conditions: ##
- ## 1. The code must retain the above copyright notice, this list of ##
- ## conditions and the following disclaimer. ##
- ## 2. Any modifications must be clearly marked as such. ##
- ## 3. Original authors' names are not deleted. ##
- ## 4. The authors' names are not used to endorse or promote products ##
- ## derived from this software without specific prior written ##
- ## permission. ##
- ## ##
- ## CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK ##
- ## DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ##
- ## ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT ##
- ## SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE ##
- ## FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ##
- ## WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN ##
- ## AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ##
- ## ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF ##
- ## THIS SOFTWARE. ##
- ## ##
- ###########################################################################
- ## ##
- ## Convert an EST WFST into C code (with awk and sed!) ##
- ## ##
- ###########################################################################
- sed '1,/EST_Header_End/d' $1 |
- awk 'BEGIN {
- mmm["a"] = 97;
- mmm["b"] = 98;
- mmm["c"] = 99;
- mmm["d"] = 100;
- mmm["e"] = 101;
- mmm["f"] = 102;
- mmm["g"] = 103;
- mmm["h"] = 104;
- mmm["i"] = 105;
- mmm["j"] = 106;
- mmm["k"] = 107;
- mmm["l"] = 108;
- mmm["m"] = 109;
- mmm["n"] = 110;
- mmm["o"] = 111;
- mmm["p"] = 112;
- mmm["q"] = 113;
- mmm["r"] = 114;
- mmm["s"] = 115;
- mmm["t"] = 116;
- mmm["u"] = 117;
- mmm["v"] = 118;
- mmm["w"] = 119;
- mmm["x"] = 120;
- mmm["y"] = 121;
- mmm["z"] = 122;
- mmm["#"] = 35;
- mmm["V"] = 86;
- mmm["N"] = 78;
- state = "0";
- name="'`basename $1 .wfst`'";
- }
- function symstate(sym,state)
- {
- m = sprintf("((fsm_%s_state_%d * 128) + %d)",name,state,mmm[sym]);
- return m;
- }
- {if (NF == 3)
- {
- state = substr($1,3);
- if (state != "0")
- {
- printf("#define fsm_%s_trans_%d 0\n",name,trans);
- trans++;
- }
- printf("#define fsm_%s_state_%d %d\n",name,state,trans);
- }
- else if (NF == 4)
- {
- printf("#define fsm_%s_trans_%d %s\n",name,trans,symstate($2,$3));
- trans++;
- }
- }
- END {printf("#define fsm_%s_trans_%d 0\n",name,trans);
- trans++;
- printf("static short fsm_%s_trans[%d] = {\n",name,trans);
- for (i=0; i<trans-1; i++)
- {
- printf(" fsm_%s_trans_%d,\n",name,i);
- }
- printf(" fsm_%s_trans_%d\n",name,i);
- printf("};\n");
- printf("static cst_fsm fsm_%s = {\n",name);
- printf(" 128, /* vocab size */\n");
- printf(" %d, /* num_transitions */\n",trans);
- printf(" fsm_%s_trans\n",name);
- printf("};\n");
- }'
-
-
|