pfsg-to-dot.gawk

来自「这是一款很好用的工具包」· GAWK 代码 · 共 88 行

GAWK
88
字号
#!/usr/local/bin/gawk -f## pfsg-to-dot --#	Generate dot(1) graph description from PFSG## usage: pfsg-to-dot [show_probs=1] [show_nums=1] file.pfsg > file.dot## $Header: /home/srilm/devel/utils/src/RCS/pfsg-to-dot.gawk,v 1.5 2003/07/10 21:09:15 stolcke Exp $#BEGIN {	show_probs = 0;	show_logs = 0;	show_nums = 0;	in_a_pfsg = 0;	logscale = 10000.5;}function bytelog2prob(p) {	x = p / logscale;	if (x < -7e2) {	    return 0;	} else {	    return exp(x);	}}function bytelog2log10(p) {	return p / logscale / 2.30258509299404568402;}$1 == "name" {	name = $2;	# handle repeated PFSGs in the same file	if (in_a_pfsg)	       print "} digraph \"" name "\" {";	else	       print "digraph \"" name "\" {";	  	print "rankdir = LR";	dotrans = 0;	in_a_pfsg = 1;}function node_label(w, i) {	if (show_nums) {		return w "\\n" i;	} else {		return w;	}} $1 == "nodes" {	numnodes = $2;	for (i = 0; i < numnodes; i ++) {		print "\tnode" i " [label=\"" $(i + 3) \				(show_nums ? "\\n" i : "") "\"];"	}}$1 == "initial" {	i = $2;#	print "\tnode" i " [label=\"START\"];"}$1 == "final" {	i = $2;#	print "\tnode" i " [label=\"END\"];"}$1 == "transitions" {	dotrans = 1;	next;}dotrans && NF == 3 {	from = $1;	to = $2;	prob = $3;	print "\tnode" from " -> node" to \		(!(show_probs || show_logs) ? "" :			" [label=\"" (show_logs ? bytelog2log10(prob) :						bytelog2prob(prob)) "\"]") ";"}END {	print "}"}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?