#!/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