DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T p

⟦8fddb872b⟧ TextFile

    Length: 23805 (0x5cfd)
    Types: TextFile
    Names: »phoneme.h«

Derivation

└─⟦b20c6495f⟧ Bits:30007238 EUUGD18: Wien-båndet, efterår 1987
    └─⟦this⟧ »EUUGD18/General/Autopun/phoneme.h« 

TextFile

/*
 * phoneme.h - definitions/declarations for phonemic translation
 *
 *	Derived from: 
 *
 *	     AUTOMATIC TRANSLATION OF ENGLISH TEXT TO PHONETICS
 *	            BY MEANS OF LETTER-TO-SOUND RULES
 *
 *			NRL Report 7948
 *
 *		      January 21st, 1976
 *	    Naval Research Laboratory, Washington, D.C.
 *
 *
 *	Published by the National Technical Information Service as
 *	document "AD/A021 929".
 */

#ifndef TRUE
#define TRUE 1
#define FALSE 0
#endif

#define MAXPHONES	301	/* max # of phonemes in a phrase (+P_end)*/

/*
 * P_* - internal representation of phoneme codes.
 */

#define P_end	 0	/* <<no sound>>	used as an invalid code	*/
#define P_IY	 1	/* bEEt		*/
#define P_IH	 2	/* bIt		*/
#define P_EY	 3	/* gAte		*/
#define P_EH	 4	/* gEt		*/
#define P_AE	 5	/* fAt		*/
#define P_AA	 6	/* fAther	*/
#define P_AO	 7	/* lAWn		*/
#define P_OW	 8	/* lOne		*/
#define P_UH	 9	/* fUll		*/
#define P_UW	10	/* fOOl		*/
#define P_ER	11	/* mURdER	*/
#define P_AX	12	/* About	*/
#define P_AH	13	/* bUt		*/
#define P_AY	14	/* hIde		*/
#define P_AW	15	/* hOW		*/
#define P_OY	16	/* tOY		*/
#define P_p	17	/* Pack		*/
#define P_b	18	/* Back		*/
#define P_t	19	/* Time		*/
#define P_d	20	/* Dime		*/
#define P_k	21	/* Coat		*/
#define P_g	22	/* Goat		*/
#define P_f	23	/* Fault	*/
#define P_v	24	/* Vault	*/
#define P_TH	25	/* eTHer	*/
#define P_DH	26	/* eiTHer	*/
#define P_s	27	/* Sue		*/
#define P_z	28	/* Zoo		*/
#define P_SH	29	/* leaSH	*/
#define P_ZH	30	/* leiSure	*/
#define P_HH	31	/* How		*/
#define P_m	32	/* suM		*/
#define P_n	33	/* suN		*/
#define P_NG	34	/* suNG		*/
#define P_l	35	/* Laugh	*/
#define P_w	36	/* Wear		*/
#define P_y	37	/* Young	*/
#define P_r	38	/* Rate		*/
#define P_CH	39	/* CHar		*/
#define P_j	40	/* Jar		*/
#define P_WH	41	/* WHere	*/
#define P_PAS	42	/* <short pause>	*/

#define P_NUM	43	/* number of phonemic codes (including P_end)	*/

/*
 * phochars[] - table for translating a phoneme code into ascii
 *  Indexed by a P_* code, phochars[] gives the ascii translation.
 */

#ifdef DATA
char *phochars[P_NUM] = {
    "",
    "IY", "IH", "EY", "EH", "AE", "AA", "AO", "OW", "UH",
    "UW", "ER", "AX", "AH", "AY", "AW", "OY",
    "p", "b", "t", "d", "k", "g", "f", "v", "TH", "DH",
    "s", "z", "SH", "ZH", "HH", "m", "n", "NG", "l",
    "w", "y", "r", "CH", "j", "WH",
    " "
};
#else
extern char *phochars[];
#endif

#define MAXCOUT	6	/* max # of output phonemes in a rule (+ terminator) */
struct rule {
    char *prefix;		/* left context				    */
    char *match;		/* characters to match			    */
    char *suffix;		/* right context			    */
    short outsyms[MAXCOUT];	/* P_end-terminated list of codes to output */
    short preflen;		/* strlen() of prefix - set at runtime	    */
    short sufflen;		/* ditto for suffix			    */
};

#ifdef DATA	/* definitions of the English rules */

static char Anything[] = "";	/* No context requirement */
static char Nothing[] = " ";	/* Context is beginning or end of word */

/*
 *	Special Context Symbols in rules:
 *
 *		#	One or more vowels
 *		:	Zero or more consonants
 *		^	One consonant.
 *		.	One of B, D, V, G, J, L, M, N, R, W or Z (voiced 
 *			consonants)
 *		%	One of ER, E, ES, ED, ING, ELY (a suffix)
 *			(Found in right context only)
 *		+	One of E, I or Y (a "front" vowel)
 *
 */

static struct rule punct_rules[] = {
    {Anything,	" ",	Anything,	{P_PAS, P_end}	},
    {Anything,	"-",	Anything,	{P_end}		},
    {".",	"'S",	Anything,	{P_z, P_end}	},
    {"#:.E",	"'S",	Anything,	{P_z, P_end}	},
    {"#",	"'S",	Anything,	{P_z, P_end}	},
    {Anything,	"'",	Anything,	{P_end}		},
    {Anything,	",",	Anything,	{P_PAS, P_end}	},
    {Anything,	".",	Anything,	{P_PAS, P_end}	},
    {Anything,	"?",	Anything,	{P_PAS, P_end}	},
    {Anything,	"!",	Anything,	{P_PAS, P_end}	},
    {Anything,	0,	Anything,	{P_end}		},
};

static struct rule A_rules[] = {
    {Anything,	"A",	Nothing,	{P_AX, P_end}			},
    {Nothing,	"ARE",	Nothing,	{P_AA, P_r, P_end}		},
    {Nothing,	"AR",	"O",		{P_AX, P_r, P_end}		},
    {Anything,	"AR",	"#",		{P_EH, P_r, P_end}		},
    {"^",	"AS",	"#",		{P_EY, P_s, P_end}		},
    {Anything,	"A",	"WA",		{P_AX, P_end}			},
    {Anything,	"AW",	Anything,	{P_AO, P_end}			},
    {" :",	"ANY",	Anything,	{P_EH, P_n, P_IY, P_end}	},
    {Anything,	"A",	"^+#",		{P_EY, P_end}			},
    {"#:",	"ALLY",	Anything,	{P_AX, P_l, P_IY, P_end}	},
    {Nothing,	"AL",	"#",		{P_AX, P_l, P_end}		},
    {Anything,	"AGAIN",Anything,	{P_AX, P_g, P_EH, P_n, P_end}	},
    {"#:",	"AG",	"E",		{P_IH, P_j, P_end}		},
    {Anything,	"A",	"^+:#",		{P_AE, P_end}			},
    {" :",	"A",	"^+ ",		{P_EY, P_end}			},
    {Anything,	"A",	"^%",		{P_EY, P_end}			},
    {Nothing,	"ARR",	Anything,	{P_AX, P_r, P_end}		},
    {Anything,	"ARR",	Anything,	{P_AE, P_r, P_end}		},
    {" :",	"AR",	Nothing,	{P_AA, P_r, P_end}		},
    {Anything,	"AR",	Nothing,	{P_ER, P_end}			},
    {Anything,	"AR",	Anything,	{P_AA, P_r, P_end}		},
    {Anything,	"AIR",	Anything,	{P_EH, P_r, P_end}		},
    {Anything,	"AI",	Anything,	{P_EY, P_end}			},
    {Anything,	"AY",	Anything,	{P_EY, P_end}			},
    {Anything,	"AU",	Anything,	{P_AO, P_end}			},
    {"#:",	"AL",	Nothing,	{P_AX, P_l, P_end}		},
    {"#:",	"ALS",	Nothing,	{P_AX, P_l, P_z, P_end}		},
    {Anything,	"ALK",	Anything,	{P_AO, P_k, P_end}		},
    {Anything,	"AL",	"^",		{P_AO, P_l, P_end}		},
    {" :",	"ABLE",	Anything,	{P_EY, P_b, P_AX, P_l, P_end}	},
    {Anything,	"ABLE",	Anything,	{P_AX, P_b, P_AX, P_l, P_end}	},
    {Anything,	"ANG",	"+",		{P_EY, P_n, P_j, P_end}		},
    {Anything,	"A",	Anything,	{P_AE, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule B_rules[] = {
    {Nothing,	"BE",	"^#",		{P_b, P_IH, P_end}		},
    {Anything,	"BEING",Anything,	{P_b, P_IY, P_IH, P_NG, P_end}	},
    {Nothing,	"BOTH",	Nothing,	{P_b, P_OW, P_TH, P_end}	},
    {Nothing,	"BUS",	"#",		{P_b, P_IH, P_z, P_end}		},
    {Anything,	"BUIL",	Anything,	{P_b, P_IH, P_l, P_end}		},
    {Anything,	"B",	Anything,	{P_b, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule C_rules[] = {
    {Nothing,	"CH",	"^",		{P_k, P_end}			},
    {"^E",	"CH",	Anything,	{P_k, P_end}			},
    {Anything,	"CH",	Anything,	{P_CH, P_end}			},
    {" S",	"CI",	"#",		{P_s, P_AY, P_end}		},
    {Anything,	"CI",	"A",		{P_SH, P_end}			},
    {Anything,	"CI",	"O",		{P_SH, P_end}			},
    {Anything,	"CI",	"EN",		{P_SH, P_end}			},
    {Anything,	"C",	"+",		{P_s, P_end}			},
    {Anything,	"CK",	Anything,	{P_k, P_end}			},
    {Anything,	"COM",	"%",		{P_k, P_AH, P_m, P_end}		},
    {Anything,	"C",	Anything,	{P_k, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule D_rules[] = {
    {"#:",	"DED",	Nothing,	{P_d, P_IH, P_d, P_end}		},
    {".E",	"D",	Nothing,	{P_d, P_end}			},
    {"#:^E",	"D",	Nothing,	{P_t, P_end}			},
    {Nothing,	"DE",	"^#",		{P_d, P_IH, P_end}		},
    {Nothing,	"DO",	Nothing,	{P_d, P_UW, P_end}		},
    {Nothing,	"DOES",	Anything,	{P_d, P_AH, P_z, P_end}		},
    {Nothing,	"DOING",Anything,	{P_d, P_UW, P_IH, P_NG, P_end}	},
    {Nothing,	"DOW",	Anything,	{P_d, P_AW, P_end}		},
    {Anything,	"DU",	"A",		{P_j, P_UW, P_end}		},
    {Anything,	"D",	Anything,	{P_d, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule E_rules[] = {
    {"#:",	"E",	Nothing,	{P_end}				},
    {"':^",	"E",	Nothing,	{P_end}				},
    {" :",	"E",	Nothing,	{P_IY, P_end}			},
    {"#",	"ED",	Nothing,	{P_d, P_end}			},
    {"#:",	"E",	"D ",		{P_end}				},
    {Anything,	"EV",	"ER",		{P_EH, P_v, P_end}		},
    {Anything,	"E",	"^%",		{P_IY, P_end}			},
    {Anything,	"ERI",	"#",		{P_IY, P_r, P_IY, P_end}	},
    {Anything,	"ERI",	Anything,	{P_EH, P_r, P_IH, P_end}	},
    {"#:",	"ER",	"#",		{P_ER, P_end}			},
    {Anything,	"ER",	"#",		{P_EH, P_r, P_end}		},
    {Anything,	"ER",	Anything,	{P_ER, P_end}			},
    {Nothing,	"EVEN",	Anything,	{P_IY, P_v, P_EH, P_n, P_end}	},
    {"#:",	"E",	"W",		{P_end}				},
    {"T",	"EW",	Anything,	{P_UW, P_end}			},
    {"S",	"EW",	Anything,	{P_UW, P_end}			},
    {"R",	"EW",	Anything,	{P_UW, P_end}			},
    {"D",	"EW",	Anything,	{P_UW, P_end}			},
    {"L",	"EW",	Anything,	{P_UW, P_end}			},
    {"Z",	"EW",	Anything,	{P_UW, P_end}			},
    {"N",	"EW",	Anything,	{P_UW, P_end}			},
    {"J",	"EW",	Anything,	{P_UW, P_end}			},
    {"TH",	"EW",	Anything,	{P_UW, P_end}			},
    {"CH",	"EW",	Anything,	{P_UW, P_end}			},
    {"SH",	"EW",	Anything,	{P_UW, P_end}			},
    {Anything,	"EW",	Anything,	{P_y, P_UW, P_end}		},
    {Anything,	"E",	"O",		{P_IY, P_end}			},
    {"#:S",	"ES",	Nothing,	{P_IH, P_z, P_end}		},
    {"#:C",	"ES",	Nothing,	{P_IH, P_z, P_end}		},
    {"#:G",	"ES",	Nothing,	{P_IH, P_z, P_end}		},
    {"#:Z",	"ES",	Nothing,	{P_IH, P_z, P_end}		},
    {"#:X",	"ES",	Nothing,	{P_IH, P_z, P_end}		},
    {"#:J",	"ES",	Nothing,	{P_IH, P_z, P_end}		},
    {"#:CH",	"ES",	Nothing,	{P_IH, P_z, P_end}		},
    {"#:SH",	"ES",	Nothing,	{P_IH, P_z, P_end}		},
    {"#:",	"E",	"S ",		{P_end}				},
    {"#:",	"ELY",	Nothing,	{P_l, P_IY, P_end}		},
    {"#:",	"EMENT",Anything,	{P_m, P_EH, P_n, P_t, P_end}	},
    {Anything,	"EFUL",	Anything,	{P_f, P_UH, P_l, P_end}		},
    {Anything,	"EE",	Anything,	{P_IY, P_end}			},
    {Anything,	"EARN",	Anything,	{P_ER, P_n, P_end}		},
    {Nothing,	"EAR",	"^",		{P_ER, P_end}			},
    {Anything,	"EAD",	Anything,	{P_EH, P_d, P_end}		},
    {"#:",	"EA",	Nothing,	{P_IY, P_AX, P_end}		},
    {Anything,	"EA",	"SU",		{P_EH, P_end}			},
    {Anything,	"EA",	Anything,	{P_IY, P_end}			},
    {Anything,	"EIGH",	Anything,	{P_EY, P_end}			},
    {Anything,	"EI",	Anything,	{P_IY, P_end}			},
    {Nothing,	"EYE",	Anything,	{P_AY, P_end}			},
    {Anything,	"EY",	Anything,	{P_IY, P_end}			},
    {Anything,	"EU",	Anything,	{P_y, P_UW, P_end}		},
    {Anything,	"E",	Anything,	{P_EH, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule F_rules[] = {
    {Anything,	"FUL",	Anything,	{P_f, P_UH, P_l, P_end}		},
    {Anything,	"F",	Anything,	{P_f, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule G_rules[] = {
    {Anything,	"GIV",	Anything,	{P_g, P_IH, P_v, P_end}		},
    {Nothing,	"G",	"I^",		{P_g, P_end}			},
    {Anything,	"GE",	"T",		{P_g, P_EH, P_end}		},
    {"SU",	"GGES",	Anything,	{P_g, P_j, P_EH, P_s, P_end}	},
    {Anything,	"GG",	Anything,	{P_g, P_end}			},
    {" B#",	"G",	Anything,	{P_g, P_end}			},
    {Anything,	"G",	"+",		{P_j, P_end}			},
    {Anything,	"GREAT",Anything,	{P_g, P_r, P_EY, P_t, P_end}	},
    {"#",	"GH",	Anything,	{P_end}				},
    {Anything,	"G",	Anything,	{P_g, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule H_rules[] = {
    {Nothing,	"HAV",	Anything,	{P_HH, P_AE, P_v, P_end}	},
    {Nothing,	"HERE",	Anything,	{P_HH, P_IY, P_r, P_end}	},
    {Nothing,	"HOUR",	Anything,	{P_AW, P_ER, P_end}		},
    {Anything,	"HOW",	Anything,	{P_HH, P_AW, P_end}		},
    {Anything,	"H",	"#",		{P_HH, P_end}			},
    {Anything,	"H",	Anything,	{P_end}				},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule I_rules[] = {
    {Nothing,	"IN",	Anything,	{P_IH, P_n, P_end}		},
    {Nothing,	"I",	Nothing,	{P_AY, P_end}			},
    {Anything,	"IN",	"D",		{P_AY, P_n, P_end}		},
    {Anything,	"IER",	Anything,	{P_IY, P_ER, P_end}		},
    {"#:R",	"IED",	Anything,	{P_IY, P_d, P_end}		},
    {Anything,	"IED",	Nothing,	{P_AY, P_d, P_end}		},
    {Anything,	"IEN",	Anything,	{P_IY, P_EH, P_n, P_end}	},
    {Anything,	"IE",	"T",		{P_AY, P_EH, P_end}		},
    {" :",	"I",	"%",		{P_AY, P_end}			},
    {Anything,	"I",	"%",		{P_IY, P_end}			},
    {Anything,	"IE",	Anything,	{P_IY, P_end}			},
    {Anything,	"I",	"^+:#",		{P_IH, P_end}			},
    {Anything,	"IR",	"#",		{P_AY, P_r, P_end}		},
    {Anything,	"IZ",	"%",		{P_AY, P_z, P_end}		},
    {Anything,	"IS",	"%",		{P_AY, P_z, P_end}		},
    {Anything,	"I",	"D%",		{P_AY, P_end}			},
    {"+^",	"I",	"^+",		{P_IH, P_end}			},
    {Anything,	"I",	"T%",		{P_AY, P_end}			},
    {"#:^",	"I",	"^+",		{P_IH, P_end}			},
    {Anything,	"I",	"^+",		{P_AY, P_end}			},
    {Anything,	"IR",	Anything,	{P_ER, P_end}			},
    {Anything,	"IGH",	Anything,	{P_AY, P_end}			},
    {Anything,	"ILD",	Anything,	{P_AY, P_l, P_d, P_end}		},
    {Anything,	"IGN",	Nothing,	{P_AY, P_n, P_end}		},
    {Anything,	"IGN",	"^",		{P_AY, P_n, P_end}		},
    {Anything,	"IGN",	"%",		{P_AY, P_n, P_end}		},
    {Anything,	"IQUE",	Anything,	{P_IY, P_k, P_end}		},
    {Anything,	"I",	Anything,	{P_IH, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule J_rules[] = {
    {Anything,	"J",	Anything,	{P_j, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule K_rules[] = {
    {Nothing,	"K",	"N",		{P_end}				},
    {Anything,	"K",	Anything,	{P_k, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule L_rules[] = {
    {Anything,	"LO",	"C#",		{P_l, P_OW, P_end}		},
    {"L",	"L",	Anything,	{P_end}				},
    {"#:^",	"L",	"%",		{P_AX, P_l, P_end}		},
    {Anything,	"LEAD",	Anything,	{P_l, P_IY, P_d, P_end}		},
    {Anything,	"L",	Anything,	{P_l, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule M_rules[] = {
    {Anything,	"MOV",	Anything,	{P_m, P_UW, P_v, P_end}		},
    {Anything,	"M",	Anything,	{P_m, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule N_rules[] = {
    {"E",	"NG",	"+",		{P_n, P_j, P_end}		},
    {Anything,	"NG",	"R",		{P_NG, P_g, P_end}		},
    {Anything,	"NG",	"#",		{P_NG, P_g, P_end}		},
    {Anything,	"NGL",	"%",		{P_NG, P_g, P_AX, P_l, P_end}	},
    {Anything,	"NG",	Anything,	{P_NG, P_end}			},
    {Anything,	"NK",	Anything,	{P_NG, P_k, P_end}		},
    {Nothing,	"NOW",	Nothing,	{P_n, P_AW, P_end}		},
    {Anything,	"N",	Anything,	{P_n, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule O_rules[] = {
    {Anything,	"OF",	Nothing,	{P_AX, P_v, P_end}		},
    {Anything,	"OROUGH",Anything,	{P_ER, P_OW, P_end}		},
    {"#:",	"OR",	Nothing,	{P_ER, P_end}			},
    {"#:",	"ORS",	Nothing,	{P_ER, P_z, P_end}		},
    {Anything,	"OR",	Anything,	{P_AO, P_r, P_end}		},
    {Nothing,	"ONE",	Anything,	{P_w, P_AH, P_n, P_end}		},
    {Anything,	"OW",	Anything,	{P_OW, P_end}			},
    {Nothing,	"OVER",	Anything,	{P_OW, P_v, P_ER, P_end}	},
    {Anything,	"OV",	Anything,	{P_AH, P_v, P_end}		},
    {Anything,	"O",	"^%",		{P_OW, P_end}			},
    {Anything,	"O",	"^EN",		{P_OW, P_end}			},
    {Anything,	"O",	"^I#",		{P_OW, P_end}			},
    {Anything,	"OL",	"D",		{P_OW, P_l, P_end}		},
    {Anything,	"OUGHT",Anything,	{P_AO, P_t, P_end}		},
    {Anything,	"OUGH",	Anything,	{P_AH, P_f, P_end}		},
    {Nothing,	"OU",	Anything,	{P_AW, P_end}			},
    {"H",	"OU",	"S#",		{P_AW, P_end}			},
    {Anything,	"OUS",	Anything,	{P_AX, P_s, P_end}		},
    {Anything,	"OUR",	Anything,	{P_AO, P_r, P_end}		},
    {Anything,	"OULD",	Anything,	{P_UH, P_d, P_end}		},
    {"^",	"OU",	"^L",		{P_AH, P_end}			},
    {Anything,	"OUP",	Anything,	{P_UW, P_p, P_end}		},
    {Anything,	"OU",	Anything,	{P_AW, P_end}			},
    {Anything,	"OY",	Anything,	{P_OY, P_end}			},
    {Anything,	"OING",	Anything,	{P_OW, P_IH, P_NG, P_end}	},
    {Anything,	"OI",	Anything,	{P_OY, P_end}			},
    {Anything,	"OOR",	Anything,	{P_AO, P_r, P_end}		},
    {Anything,	"OOK",	Anything,	{P_UH, P_k, P_end}		},
    {Anything,	"OOD",	Anything,	{P_UH, P_d, P_end}		},
    {Anything,	"OO",	Anything,	{P_UW, P_end}			},
    {Anything,	"O",	"E",		{P_OW, P_end}			},
    {Anything,	"O",	Nothing,	{P_OW, P_end}			},
    {Anything,	"OA",	Anything,	{P_OW, P_end}			},
    {Nothing,	"ONLY",	Anything,	{P_OW, P_n, P_l, P_IY, P_end}	},
    {Nothing,	"ONCE",	Anything,	{P_w, P_AH, P_n, P_s, P_end}	},
    {Anything,	"ON'T",	Anything,	{P_OW, P_n, P_t, P_end}		},
    {"C",	"O",	"N",		{P_AA, P_end}			},
    {Anything,	"O",	"NG",		{P_AO, P_end}			},
    {" :^",	"O",	"N",		{P_AH, P_end}			},
    {"I",	"ON",	Anything,	{P_AX, P_n, P_end}		},
    {"#:",	"ON",	Nothing,	{P_AX, P_n, P_end}		},
    {"#^",	"ON",	Anything,	{P_AX, P_n, P_end}		},
    {Anything,	"O",	"ST ",		{P_OW, P_end}			},
    {Anything,	"OF",	"^",		{P_AO, P_f, P_end}		},
    {Anything,	"OTHER",Anything,	{P_AH, P_DH, P_ER, P_end}	},
    {Anything,	"OSS",	Nothing,	{P_AO, P_s, P_end}		},
    {"#:^",	"OM",	Anything,	{P_AH, P_m, P_end}		},
    {Anything,	"O",	Anything,	{P_AA, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule P_rules[] = {
    {Anything,	"PH",	Anything,	{P_f, P_end}			},
    {Anything,	"PEOP",	Anything,	{P_p, P_IY, P_p, P_end}		},
    {Anything,	"POW",	Anything,	{P_p, P_AW, P_end}		},
    {Anything,	"PUT",	Nothing,	{P_p, P_UH, P_t, P_end}		},
    {Anything,	"P",	Anything,	{P_p, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule Q_rules[] = {
    {Anything,	"QUAR",	Anything,	{P_k, P_w, P_AO, P_r, P_end}	},
    {Anything,	"QU",	Anything,	{P_k, P_w, P_end}		},
    {Anything,	"Q",	Anything,	{P_k, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule R_rules[] = {
    {Nothing,	"RE",	"^#",		{P_r, P_IY, P_end}		},
    {Anything,	"R",	Anything,	{P_r, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule S_rules[] = {
    {Anything,	"SH",	Anything,	{P_SH, P_end}			},
    {"#",	"SION",	Anything,	{P_ZH, P_AX, P_n, P_end}	},
    {Anything,	"SOME",	Anything,	{P_s, P_AH, P_m, P_end}		},
    {"#",	"SUR",	"#",		{P_ZH, P_ER, P_end}		},
    {Anything,	"SUR",	"#",		{P_SH, P_ER, P_end}		},
    {"#",	"SU",	"#",		{P_ZH, P_UW, P_end}		},
    {"#",	"SSU",	"#",		{P_SH, P_UW, P_end}		},
    {"#",	"SED",	Nothing,	{P_z, P_d, P_end}		},
    {"#",	"S",	"#",		{P_z, P_end}			},
    {Anything,	"SAID",	Anything,	{P_s, P_EH, P_d, P_end}		},
    {"^",	"SION",	Anything,	{P_SH, P_AX, P_n, P_end}	},
    {Anything,	"S",	"S",		{P_end}				},
    {".",	"S",	Nothing,	{P_z, P_end}			},
    {"#:.E",	"S",	Nothing,	{P_z, P_end}			},
    {"#:^##",	"S",	Nothing,	{P_z, P_end}			},
    {"#:^#",	"S",	Nothing,	{P_s, P_end}			},
    {"U",	"S",	Nothing,	{P_s, P_end}			},
    {" :#",	"S",	Nothing,	{P_z, P_end}			},
    {Nothing,	"SCH",	Anything,	{P_s, P_k, P_end}		},
    {Anything,	"S",	"C+",		{P_end}				},
    {"#",	"SM",	Anything,	{P_z, P_m, P_end}		},
    {"#",	"SN",	"'",		{P_z, P_AX, P_n, P_end}		},
    {Anything,	"S",	Anything,	{P_s, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule T_rules[] = {
    {Nothing,	"THE",	Nothing,	{P_DH, P_AX, P_end}		},
    {Anything,	"TO",	Nothing,	{P_t, P_UW, P_end}		},
    {Anything,	"THAT",	Nothing,	{P_DH, P_AE, P_t, P_end}	},
    {Nothing,	"THIS",	Nothing,	{P_DH, P_IH, P_s, P_end}	},
    {Nothing,	"THEY",	Anything,	{P_DH, P_EY, P_end}		},
    {Nothing,	"THERE",Anything,	{P_DH, P_EH, P_r, P_end}	},
    {Anything,	"THER",	Anything,	{P_DH, P_ER, P_end}		},
    {Anything,	"THEIR",Anything,	{P_DH, P_EH, P_r, P_end}	},
    {Nothing,	"THAN",	Nothing,	{P_DH, P_AE, P_n, P_end}	},
    {Nothing,	"THEM",	Nothing,	{P_DH, P_EH, P_m, P_end}	},
    {Anything,	"THESE",Nothing,	{P_DH, P_IY, P_z, P_end}	},
    {Nothing,	"THEN",	Anything,	{P_DH, P_EH, P_n, P_end}	},
    {Anything,	"THROUGH",Anything,	{P_TH, P_r, P_UW, P_end}	},
    {Anything,	"THOSE",Anything,	{P_DH, P_OW, P_z, P_end}	},
    {Anything,	"THOUGH",Nothing,	{P_DH, P_OW, P_end}		},
    {Nothing,	"THUS",	Anything,	{P_DH, P_AH, P_s, P_end}	},
    {Anything,	"TH",	Anything,	{P_TH, P_end}			},
    {"#:",	"TED",	Nothing,	{P_t, P_IH, P_d, P_end}		},
    {"S",	"TI",	"#N",		{P_CH, P_end}			},
    {Anything,	"TI",	"O",		{P_SH, P_end}			},
    {Anything,	"TI",	"A",		{P_SH, P_end}			},
    {Anything,	"TIEN",	Anything,	{P_SH, P_AX, P_n, P_end}	},
    {Anything,	"TUR",	"#",		{P_CH, P_ER, P_end}		},
    {Anything,	"TU",	"A",		{P_CH, P_UW, P_end}		},
    {Nothing,	"TWO",	Anything,	{P_t, P_UW, P_end}		},
    {Anything,	"T",	Anything,	{P_t, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule U_rules[] = {
    {Nothing,	"UN",	"I",		{P_y, P_UW, P_n, P_end}		},
    {Nothing,	"UN",	Anything,	{P_AH, P_n, P_end}		},
    {Nothing,	"UPON",	Anything,	{P_AX, P_p, P_AO, P_n, P_end}	},
    {"T",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {"S",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {"R",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {"D",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {"L",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {"Z",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {"N",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {"J",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {"TH",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {"CH",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {"SH",	"UR",	"#",		{P_UH, P_r, P_end}		},
    {Anything,	"UR",	"#",		{P_y, P_UH, P_r, P_end}		},
    {Anything,	"UR",	Anything,	{P_ER, P_end}			},
    {Anything,	"U",	"^ ",		{P_AH, P_end}			},
    {Anything,	"U",	"^^",		{P_AH, P_end}			},
    {Anything,	"UY",	Anything,	{P_AY, P_end}			},
    {" G",	"U",	"#",		{P_end}				},
    {"G",	"U",	"%",		{P_end}				},
    {"G",	"U",	"#",		{P_w, P_end}			},
    {"#N",	"U",	Anything,	{P_y, P_UW, P_end}		},
    {"T",	"U",	Anything,	{P_UW, P_end}			},
    {"S",	"U",	Anything,	{P_UW, P_end}			},
    {"R",	"U",	Anything,	{P_UW, P_end}			},
    {"D",	"U",	Anything,	{P_UW, P_end}			},
    {"L",	"U",	Anything,	{P_UW, P_end}			},
    {"Z",	"U",	Anything,	{P_UW, P_end}			},
    {"N",	"U",	Anything,	{P_UW, P_end}			},
    {"J",	"U",	Anything,	{P_UW, P_end}			},
    {"TH",	"U",	Anything,	{P_UW, P_end}			},
    {"CH",	"U",	Anything,	{P_UW, P_end}			},
    {"SH",	"U",	Anything,	{P_UW, P_end}			},
    {Anything,	"U",	Anything,	{P_y, P_UW, P_end}		},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule V_rules[] = {
    {Anything,	"VIEW",	Anything,	{P_v, P_y, P_UW, P_end}		},
    {Anything,	"V",	Anything,	{P_v, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule W_rules[] = {
    {Nothing,	"WERE",	Anything,	{P_w, P_ER, P_end}		},
    {Anything,	"WA",	"S",		{P_w, P_AA, P_end}		},
    {Anything,	"WA",	"T",		{P_w, P_AA, P_end}		},
    {Anything,	"WHERE",Anything,	{P_WH, P_EH, P_r, P_end}	},
    {Anything,	"WHAT",	Anything,	{P_WH, P_AA, P_t, P_end}	},
    {Anything,	"WHOL",	Anything,	{P_HH, P_OW, P_l, P_end}		},
    {Anything,	"WHO",	Anything,	{P_HH, P_UW, P_end}		},
    {Anything,	"WH",	Anything,	{P_WH, P_end}			},
    {Anything,	"WAR",	Anything,	{P_w, P_AO, P_r, P_end}		},
    {Anything,	"WOR",	"^",		{P_w, P_ER, P_end}		},
    {Anything,	"WR",	Anything,	{P_r, P_end}			},
    {Anything,	"W",	Anything,	{P_w, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule X_rules[] = {
    {Anything,	"X",	Anything,	{P_k, P_s, P_end}		},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule Y_rules[] = {
    {Anything,	"YOUNG",Anything,	{P_y, P_AH, P_NG, P_end}	},
    {Nothing,	"YOU",	Anything,	{P_y, P_UW, P_end}		},
    {Nothing,	"YES",	Anything,	{P_y, P_EH, P_s, P_end}		},
    {Nothing,	"Y",	Anything,	{P_y, P_end}			},
    {"#:^",	"Y",	Nothing,	{P_IY, P_end}			},
    {"#:^",	"Y",	"I",		{P_IY, P_end}			},
    {" :",	"Y",	Nothing,	{P_AY, P_end}			},
    {" :",	"Y",	"#",		{P_AY, P_end}			},
    {" :",	"Y",	"^+:#",		{P_IH, P_end}			},
    {" :",	"Y",	"^#",		{P_AY, P_end}			},
    {Anything,	"Y",	Anything,	{P_IH, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};

static struct rule Z_rules[] = {
    {Anything,	"Z",	Anything,	{P_z, P_end}			},
    {Anything,	0,	Anything,	{P_end}				}
};



struct rule *Rules[] =
	{
	punct_rules,
	A_rules, B_rules, C_rules, D_rules, E_rules, F_rules, G_rules, 
	H_rules, I_rules, J_rules, K_rules, L_rules, M_rules, N_rules, 
	O_rules, P_rules, Q_rules, R_rules, S_rules, T_rules, U_rules, 
	V_rules, W_rules, X_rules, Y_rules, Z_rules
	};

#else /* DATA */
extern struct rule rules[];
#endif

#define RIDX_PUNC	0	/* Rules[] index of punctuation rules	*/
#define RIDX_A		1	/* Rules[] index of A_rules		*/
#define RULECNT	(sizeof(Rules) / sizeof(Rules[0])) /* # of Rule tables	*/