! -*- coding: utf-8 -*-

Define Boundary [" " | #] ;

Define TagName [{Ena} | {Nu} | {Ti}] {mex} Alpha* ;

Define Suffix ["s" | "e" ["n"|"t"] ("s") | ["a"|"e"|"o"] "r" ({na}) ("s")] ;

! Skip already tagged names
Define SkipTagged ["<" TagName ">" [? - "<"]+ {</} TagName ">"] ;

Define EnamexEvnClu @bin"gazetteer-pm/EnamexEvnClu-2.fst" ;
Define EnamexEvnHpl @bin"gazetteer-pm/EnamexEvnHpl-2.fst" ;
Define EnamexEvnRlg @bin"gazetteer-pm/EnamexEvnRlg-2.fst" ;
Define EnamexEvnWth @bin"gazetteer-pm/EnamexEvnWth-2.fst" ;
Define EnamexLocAst @bin"gazetteer-pm/EnamexLocAst-2.fst" ;
Define EnamexLocFnc @bin"gazetteer-pm/EnamexLocFnc-2.fst" ;
Define EnamexLocGpl @bin"gazetteer-pm/EnamexLocGpl-2.fst" ;
Define EnamexLocPpl @bin"gazetteer-pm/EnamexLocPpl-2.fst" ;
Define EnamexLocStr @bin"gazetteer-pm/EnamexLocStr-2.fst" ;
Define EnamexObjFwp @bin"gazetteer-pm/EnamexObjFwp-2.fst" ;
Define EnamexObjPrd @bin"gazetteer-pm/EnamexObjPrd-2.fst" ;
Define EnamexObjPrz @bin"gazetteer-pm/EnamexObjPrz-2.fst" ;
Define EnamexObjVhg @bin"gazetteer-pm/EnamexObjVhg-2.fst" ;
Define EnamexObjVhw @bin"gazetteer-pm/EnamexObjVhw-2.fst" ;
Define EnamexOrgAth @bin"gazetteer-pm/EnamexOrgAth-2.fst" ;
Define EnamexOrgCrp @bin"gazetteer-pm/EnamexOrgCrp-2.fst" ;
Define EnamexOrgEdu @bin"gazetteer-pm/EnamexOrgEdu-2.fst" ;
Define EnamexOrgFin @bin"gazetteer-pm/EnamexOrgFin-2.fst" ;
Define EnamexOrgPlt @bin"gazetteer-pm/EnamexOrgPlt-2.fst" ;
Define EnamexPrsHum @bin"gazetteer-pm/EnamexPrsHum-2.fst" ;
Define EnamexPrsMth @bin"gazetteer-pm/EnamexPrsMth-2.fst" ;
Define EnamexWrkWaa @bin"gazetteer-pm/EnamexWrkWaa-2.fst" ;
Define NumexMsrCur @bin"gazetteer-pm/NumexMsrCur-2.fst" ;
Define NumexMsrDst @bin"gazetteer-pm/NumexMsrDst-2.fst" ;
Define NumexMsrFrq @bin"gazetteer-pm/NumexMsrFrq-2.fst" ;
Define NumexMsrInx @bin"gazetteer-pm/NumexMsrInx-2.fst" ;
Define NumexMsrMsu @bin"gazetteer-pm/NumexMsrMsu-2.fst" ;
Define TimexTmeDat @bin"gazetteer-pm/TimexTmeDat-2.fst" ;


Define EnamexEvnClu1 EnamexEvnClu EndTag(EnamexEvnClu) ; 1
Define EnamexEvnHpl1 EnamexEvnHpl EndTag(EnamexEvnHpl) ; 1
Define EnamexEvnRlg1 EnamexEvnRlg EndTag(EnamexEvnRlg) ; 1
Define EnamexEvnWth1 EnamexEvnWth EndTag(EnamexEvnWth) ; 1
Define EnamexLocAst1 EnamexLocAst EndTag(EnamexLocAst) ; 1
Define EnamexLocFnc1 EnamexLocFnc EndTag(EnamexLocFnc) ; 1
Define EnamexLocGpl1 EnamexLocGpl EndTag(EnamexLocGpl) ; 1
Define EnamexLocPpl1 EnamexLocPpl EndTag(EnamexLocPpl) ; 1
Define EnamexLocStr1 EnamexLocStr EndTag(EnamexLocStr) ; 1
Define EnamexObjFwp1 EnamexObjFwp EndTag(EnamexObjFwp) ; 1
Define EnamexObjPrd1 EnamexObjPrd EndTag(EnamexObjPrd) ; 1
Define EnamexObjPrz1 EnamexObjPrz EndTag(EnamexObjPrz) ; 1
Define EnamexObjVhg1 EnamexObjVhg EndTag(EnamexObjVhg) ; 1
Define EnamexObjVhw1 EnamexObjVhw EndTag(EnamexObjVhw) ; 1
Define EnamexOrgAth1 EnamexOrgAth EndTag(EnamexOrgAth) ; 1
Define EnamexOrgCrp1 EnamexOrgCrp EndTag(EnamexOrgCrp) ; 1
Define EnamexOrgEdu1 EnamexOrgEdu EndTag(EnamexOrgEdu) ; 1
Define EnamexOrgFin1 EnamexOrgFin EndTag(EnamexOrgFin) ; 1
Define EnamexOrgPlt1 EnamexOrgPlt EndTag(EnamexOrgPlt) ; 1
Define EnamexPrsHum1 EnamexPrsHum EndTag(EnamexPrsHum) ; 1
Define EnamexPrsMth1 EnamexPrsMth EndTag(EnamexPrsMth) ; 1
Define EnamexWrkWaa1 EnamexWrkWaa EndTag(EnamexWrkWaa) ; 1
Define NumexMsrCur1 NumexMsrCur EndTag(NumexMsrCur) ; 1
Define NumexMsrDst1 NumexMsrDst EndTag(NumexMsrDst) ; 1
Define NumexMsrFrq1 NumexMsrFrq EndTag(NumexMsrFrq) ; 1
Define NumexMsrInx1 NumexMsrInx EndTag(NumexMsrInx) ; 1
Define NumexMsrMsu1 NumexMsrMsu EndTag(NumexMsrMsu) ; 1
Define TimexTmeDat1 TimexTmeDat EndTag(TimexTmeDat) ; 1

Define EnamexEvnClu2
	[EnamexEvnClu [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexEvnClu) ; 2
Define EnamexEvnHpl2
	[EnamexEvnHpl [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexEvnHpl) ; 2
Define EnamexEvnRlg2
	[EnamexEvnRlg [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexEvnRlg) ; 2
Define EnamexEvnWth2
	[EnamexEvnWth [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexEvnWth) ; 2
Define EnamexLocAst2
	[EnamexLocAst [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexLocAst) ; 2
Define EnamexLocFnc2
	[EnamexLocFnc [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexLocFnc) ; 2
Define EnamexLocGpl2
	[EnamexLocGpl [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexLocGpl) ; 2
Define EnamexLocPpl2
	[EnamexLocPpl [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexLocPpl) ; 2
Define EnamexLocStr2
	[EnamexLocStr [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexLocStr) ; 2
Define EnamexObjFwp2
	[EnamexObjFwp [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexObjFwp) ; 2
Define EnamexObjPrd2
	[EnamexObjPrd [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexObjPrd) ; 2
Define EnamexObjPrz2
	[EnamexObjPrz [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexObjPrz) ; 2
Define EnamexObjVhg2
	[EnamexObjVhg [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexObjVhg) ; 2
Define EnamexObjVhw2
	[EnamexObjVhw [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexObjVhw) ; 2
Define EnamexOrgAth2
	[EnamexOrgAth [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexOrgAth) ; 2
Define EnamexOrgCrp2
	[EnamexOrgCrp [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexOrgCrp) ; 2
Define EnamexOrgEdu2
	[EnamexOrgEdu [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexOrgEdu) ; 2
Define EnamexOrgFin2
	[EnamexOrgFin [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexOrgFin) ; 2
Define EnamexOrgPlt2
	[EnamexOrgPlt [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexOrgPlt) ; 2
Define EnamexPrsHum2
	[EnamexPrsHum [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexPrsHum) ; 2
Define EnamexPrsMth2
	[EnamexPrsMth [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexPrsMth) ; 2
Define EnamexWrkWaa2
	[EnamexWrkWaa [Suffix | ToUpper(Suffix)]]
	EndTag(EnamexWrkWaa) ; 2
Define NumexMsrCur2
	[NumexMsrCur [Suffix | ToUpper(Suffix)]]
	EndTag(NumexMsrCur) ; 2
Define NumexMsrDst2
	[NumexMsrDst [Suffix | ToUpper(Suffix)]]
	EndTag(NumexMsrDst) ; 2
Define NumexMsrFrq2
	[NumexMsrFrq [Suffix | ToUpper(Suffix)]]
	EndTag(NumexMsrFrq) ; 2
Define NumexMsrInx2
	[NumexMsrInx [Suffix | ToUpper(Suffix)]]
	EndTag(NumexMsrInx) ; 2
Define NumexMsrMsu2
	[NumexMsrMsu [Suffix | ToUpper(Suffix)]]
	EndTag(NumexMsrMsu) ; 2
Define TimexTmeDat2
	[TimexTmeDat [Suffix | ToUpper(Suffix)]]
	EndTag(TimexTmeDat) ; 2


Define TOP [ SkipTagged | EnamexEvnClu1 | EnamexEvnHpl1 | EnamexEvnRlg1 | EnamexEvnWth1 | EnamexLocAst1 | EnamexLocFnc1 | EnamexLocGpl1 | EnamexLocPpl1 | EnamexLocStr1 | EnamexObjFwp1 | EnamexObjPrd1 | EnamexObjPrz1 | EnamexObjVhg1 | EnamexObjVhw1 | EnamexOrgAth1 | EnamexOrgCrp1 | EnamexOrgEdu1 | EnamexOrgFin1 | EnamexOrgPlt1 | EnamexPrsHum1 | EnamexPrsMth1 | EnamexWrkWaa1 | NumexMsrCur1 | NumexMsrDst1 | NumexMsrFrq1 | NumexMsrInx1 | NumexMsrMsu1 | TimexTmeDat1 | EnamexEvnClu2 | EnamexEvnHpl2 | EnamexEvnRlg2 | EnamexEvnWth2 | EnamexLocAst2 | EnamexLocFnc2 | EnamexLocGpl2 | EnamexLocPpl2 | EnamexLocStr2 | EnamexObjFwp2 | EnamexObjPrd2 | EnamexObjPrz2 | EnamexObjVhg2 | EnamexObjVhw2 | EnamexOrgAth2 | EnamexOrgCrp2 | EnamexOrgEdu2 | EnamexOrgFin2 | EnamexOrgPlt2 | EnamexPrsHum2 | EnamexPrsMth2 | EnamexWrkWaa2 | NumexMsrCur2 | NumexMsrDst2 | NumexMsrFrq2 | NumexMsrInx2 | NumexMsrMsu2 | TimexTmeDat2 ] LC(Boundary) RC(Boundary) ;
