Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

2439 lines
60 KiB

<GRAMMAR LANGID="409">
<DEFINE>
<ID NAME="BILLIONS" VAL="1"/>
<ID NAME="MILLIONS" VAL="2"/>
<ID NAME="THOUSANDS" VAL="3"/>
<ID NAME="HUNDREDS" VAL="4"/>
<ID NAME="TENS" VAL="5"/>
<ID NAME="ONES" VAL="6"/>
<ID NAME="NEGATIVE" VAL="7"/>
<ID NAME="MILLBILL" VAL="8"/>
<ID NAME="DIGIT" VAL="9"/>
<ID NAME="TWODIGIT" VAL="10"/>
<ID NAME="FP_PART" VAL="11"/>
<ID NAME="ZERO" VAL="12"/>
<ID NAME="POINT_ZERO" VAL="13"/>
<ID NAME="NUMERATOR" VAL="14"/>
<ID NAME="DENOMINATOR" VAL="15"/>
<ID NAME="WHOLE" VAL="16"/>
<ID NAME="ONEDIGIT" VAL="17"/>
<ID NAME="DAY_OF_WEEK" VAL="30"/>
<ID NAME="DAY_OF_MONTH" VAL="31"/>
<ID NAME="MONTH" VAL="32"/>
<ID NAME="YEAR" VAL="33"/>
<ID NAME="TWOTHOUSAND" VAL="34"/>
<ID NAME="DATE_HUNDREDS" VAL="35"/>
<ID NAME="YEARMONTH" VAL="36"/>
<ID NAME="MONTHYEAR" VAL="37"/>
<ID NAME="QUARTER_TO" VAL="40"/>
<ID NAME="QUARTER_PAST" VAL="41"/>
<ID NAME="HALF_PAST" VAL="42"/>
<ID NAME="CLOCKTIME_QUALIFIER" VAL="43"/>
<ID NAME="HOUR_CLOCK" VAL="44"/>
<ID NAME="HOUR_COUNT" VAL="45"/>
<ID NAME="MINUTE" VAL="46"/>
<ID NAME="SECOND" VAL="47"/>
<ID NAME="AMPM" VAL="50"/>
<ID NAME="AM" VAL="51"/>
<ID NAME="PM" VAL="52"/>
<ID NAME="US_STATE" VAL="60"/>
<ID NAME="ZIPCODE" VAL="61"/>
<ID NAME="CAN_PROVINCE" VAL="62"/>
<ID NAME="ALPHA" VAL="63"/>
<ID NAME="FOURDIGITS" VAL="64"/>
<ID NAME="COMMA" VAL="65"/>
<ID NAME="ONE_PLUS" VAL="70"/>
<ID NAME="AREA_CODE" VAL="71"/>
<ID NAME="PHONENUM_EXCHANGE" VAL="72"/>
<ID NAME="EXTENSION" VAL="73"/>
<ID NAME="TEMP_UNITS" VAL="80"/>
<ID NAME="DIRECTION" VAL="81"/>
<ID NAME="UNITS" VAL="90"/>
<ID NAME="NUMBER" VAL="91"/>
<ID NAME="CURRENCY_TYPE" VAL="100"/>
<ID NAME="DOLLARS" VAL="101"/>
<ID NAME="CENTS" VAL="102"/>
<ID NAME="CURRENCY_SMALL_TYPE" VAL="103"/>
<ID NAME="GRID_INTEGER_99" VAL="1001"/>
<ID NAME="GRID_INTEGER_999" VAL="1002"/>
<ID NAME="GRID_INTEGER_MILLBILL" VAL="1003"/>
<ID NAME="GRID_INTEGER_STANDALONE" VAL="1004"/>
<ID NAME="GRID_INTEGER" VAL="1005"/>
<ID NAME="GRID_INTEGER_NONNEG" VAL="1006"/>
<ID NAME="GRID_DIGIT_NUMBER" VAL="1007"/>
<ID NAME="GRID_FP_NUMBER" VAL="1008"/>
<ID NAME="GRID_FP_NUMBER_NONNEG" VAL="1009"/>
<ID NAME="GRID_ORDINAL" VAL="1010"/>
<ID NAME="GRID_DENOMINATOR_SINGULAR" VAL="1011"/>
<ID NAME="GRID_DENOMINATOR" VAL="1012"/>
<ID NAME="GRID_FRACTION" VAL="1013"/>
<ID NAME="GRID_DATE" VAL="1014"/>
<ID NAME="GRID_YEAR" VAL="1015"/>
<ID NAME="GRID_TIME" VAL="1016"/>
<ID NAME="GRID_MINSEC" VAL="1017"/>
<ID NAME="GRID_CLOCK_MINSEC" VAL="1018"/>
<ID NAME="GRID_STATEZIP" VAL="1019"/>
<ID NAME="GRID_ZIPCODE" VAL="1020"/>
<ID NAME="GRID_CAN_ZIPCODE" VAL="1021"/>
<ID NAME="GRID_ZIP_PLUS_FOUR" VAL="1022"/>
<ID NAME="GRID_PHONE_NUMBER" VAL="1023"/>
<ID NAME="GRID_DEGREES" VAL="1024"/>
<ID NAME="GRID_MEASUREMENT" VAL="1025"/>
<ID NAME="GRID_CURRENCY" VAL="1026"/>
<ID NAME="GRID_CENTS" VAL="1027"/>
<ID NAME="COMMON_GRID_MEASURMEMENT" VAL="1028"/>
</DEFINE>
<!--
GRID_PHONE_NUMBER
Needs to precede GRID_INTEGER so that if there is any ambiguity we
will fire this rule.
A phone number is an optional area code, three digits, four digits,
and an optional extension number
-->
<RULE NAME="GRID_PHONE_NUMBER" ID="GRID_PHONE_NUMBER" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
<O>
<O>
<RULEREF NAME="one_plus" PROPNAME="ONE_PLUS" PROPID="ONE_PLUS"/>
</O>
<P>
<RULEREF NAME="area_code" PROPNAME="AREA_CODE" PROPID="AREA_CODE"/>
</P>
<O>
<RULEREF NAME="dash_slash"/>
</O>
</O>
<P>
<RULEREF NAME="three_digits_phone" PROPNAME="PHONENUM_EXCHANGE" PROPID="PHONENUM_EXCHANGE"/>
</P>
<O>
<RULEREF NAME="dash_slash"/>
</O>
<P>
<RULEREF NAME="four_digits" PROPNAME="FOURDIGITS" PROPID="FOURDIGITS"/>
</P>
<O>
<L>
<P>
ext.
</P>
<P>
extension
</P>
<P>
X.
</P>
</L>
<P>
<RULEREF NAME="extension" PROPNAME="EXTENSION" PROPID="EXTENSION"/>
</P>
</O>
</RULE>
<!--
INTEGER_99
Numbers in [0, 100)
Toplevel inactive but can be imported
-->
<RULE NAME="GRID_INTEGER_99" ID="GRID_INTEGER_99" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<RULEREF NAME="cardinal_99" PROPNAME="ONES" PROPID="ONES"/>
</RULE>
<!--
INTEGER_999
Numbers in [0, 1000)
Toplevel inactive but can be imported
-->
<RULE NAME="GRID_INTEGER_999" ID="GRID_INTEGER_999" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<RULEREF NAME="cardinal_999" PROPNAME="ONES" PROPID="ONES"/>
</RULE>
<!--
INTEGER_MILLBILL
Numbers for which the word "million" or "billion" should be displayed
-->
<RULE NAME="GRID_INTEGER_MILLBILL" ID="GRID_INTEGER_MILLBILL" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<L>
<P>
<RULEREF NAME="GRID_INTEGER_99" PROPNAME="GRID_INTEGER_99" PROPID="GRID_INTEGER_99"/>
</P>
<P>
<RULEREF NAME="GRID_FP_NUMBER_NONNEG" PROPNAME="GRID_FP_NUMBER_NONNEG" PROPID="GRID_FP_NUMBER_NONNEG"/>
</P>
</L>
<L PROPNAME="MILLBILL" PROPID="MILLBILL">
<P VAL="MILLIONS" VALSTR="million">million</P>
<P VAL="BILLIONS" VALSTR="billion">billion</P>
</L>
</RULE>
<!-- Removed ID="GRID_INTEGER_MILLBILL" -->
<RULE NAME="GRID_INTEGER_20_MILLBILL" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<L>
<P>
<RULEREF NAME="cardinal_20_999" PROPNAME="GRID_INTEGER_99" PROPID="GRID_INTEGER_99"/>
</P>
<P>
<RULEREF NAME="GRID_FP_NUMBER_NONNEG" PROPNAME="GRID_FP_NUMBER_NONNEG" PROPID="GRID_FP_NUMBER_NONNEG"/>
</P>
</L>
<L PROPNAME="MILLBILL" PROPID="MILLBILL">
<P VAL="MILLIONS" VALSTR="million">million</P>
<P VAL="BILLIONS" VALSTR="billion">billion</P>
</L>
</RULE>
<!--
INTEGER_STANDALONE
A INTEGER_STANDALONE can be in the range (-1e12, 1e12) and will always be
called as a toplevel rule.
This rule is not referenced by any other rules.
-->
<RULE NAME="GRID_INTEGER_STANDALONE" ID="GRID_INTEGER_STANDALONE" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
<L>
<P>
<O>
<RULEREF NAME="NEGATIVE" PROPNAME="NEGATIVE" PROPID="NEGATIVE"/>
</O>
<P>
<RULEREF NAME="GRID_INTEGER_MILLBILL" PROPNAME="GRID_INTEGER_MILLBILL" PROPID="GRID_INTEGER_MILLBILL"/>
</P>
</P>
<P>
<RULEREF NAME="integer_base"/>
</P>
</L>
</RULE>
<!--
INTEGER
A INTEGER can be in the range (-1e12, 1e12) and will never be called
as a toplevel rule
-->
<RULE NAME="GRID_INTEGER" ID="GRID_INTEGER" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<RULEREF NAME="integer_base"/>
</RULE>
<!--
INTEGER_NONNEG
A INTEGER_NONNEG can be in the range [0, 1e12) and will never be called
as a toplevel rule
-->
<RULE NAME="GRID_INTEGER_NONNEG" ID="GRID_INTEGER_NONNEG" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<RULEREF NAME="integer_base_nonneg"/>
</RULE>
<!--
DIGIT_NUMBER
Integers in (0, 1e12), spelled out either one digit at a time or two digits
at a time.
This rule is an INACTIVE toplevel rule, since it should go through GRID_INTEGER
to be formatted.
Explicitly disallow TWODIGIT DIGIT since that is ambiguous with "twenty five"
-->
<RULE NAME="GRID_DIGIT_NUMBER" ID="GRID_DIGIT_NUMBER" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<L>
<P MIN="3" MAX="12">
<L>
<P>
<RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
</P>
<P>
<RULEREF NAME="digit" PROPNAME="ONEDIGIT" PROPID="ONEDIGIT"/>
</P>
</L>
</P>
<P>
<P>
<RULEREF NAME="digit" PROPNAME="ONEDIGIT" PROPID="ONEDIGIT"/>
</P>
<P>
<RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
</P>
</P>
<P MIN="2" MAX="2">
<RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
</P>
<P MIN="2" MAX="2">
<RULEREF NAME="digit" PROPNAME="ONEDIGIT" PROPID="ONEDIGIT"/>
</P>
</L>
</RULE>
<!--
FP_NUMBER
Floating-point numbers with up to 12 sig figs. Both the stuff to the left of the
decimal point and the stuff to the right of the decimal point can be either
NUMBERs or DIGIT_NUMBERs
-->
<RULE NAME="GRID_FP_NUMBER" ID="GRID_FP_NUMBER" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="1">
<O>
<RULEREF NAME="NEGATIVE" PROPNAME="NEGATIVE" PROPID="NEGATIVE"/>
</O>
<P>
<RULEREF NAME="fp_number_nonneg"/>
</P>
</RULE>
<RULE NAME="GRID_FP_NUMBER_NONNEG" ID="GRID_FP_NUMBER_NONNEG" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<RULEREF NAME="fp_number_nonneg"/>
</RULE>
<!--
ORDINAL
Ordinal numbers from "zeroth" to "999,999,999,999th"
Not a toplevel rule; will fire only as part of another rule
-->
<RULE NAME="GRID_ORDINAL" ID="GRID_ORDINAL" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<L>
<P>
<!-- If a cardinal big_part is there, the ordinal ending must be there -->
<O>
<RULEREF NAME="big_part"/>
</O>
<P>
<RULEREF NAME="ordinal_999" PROPNAME="ONES" PROPID="ONES"/>
</P>
</P>
<P>
<!--Something like "three thousandth"-->
<RULEREF NAME="big_part_ord"/>
</P>
</L>
</RULE>
<!--
DENOMINATOR_SINGULAR
Almost exactly the same as an ORDINAL, but "half" replaces "second"
-->
<RULE NAME="GRID_DENOMINATOR_SINGULAR" ID="GRID_DENOMINATOR_SINGULAR" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<L>
<P>
<O>
<RULEREF NAME="big_part"/>
</O>
<P>
<RULEREF NAME="ordinal_999_den_singular" PROPNAME="ONES" PROPID="ONES"/>
</P>
</P>
<P>
<RULEREF NAME="big_part_ord"/>
</P>
</L>
</RULE>
<!--
DENOMINATOR
Almost exactly the same as ORDINALs. The only difference is the plural
("thirds" instead of "third")
-->
<RULE NAME="GRID_DENOMINATOR" ID="GRID_DENOMINATOR" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<L>
<P>
<O>
<RULEREF NAME="big_part"/>
</O>
<P>
<RULEREF NAME="ordinal_999_den" PROPNAME="ONES" PROPID="ONES"/>
</P>
</P>
<P>
<RULEREF NAME="big_part_ord_den"/>
</P>
</L>
</RULE>
<!--
FRACTION
Can be expressed as either "three over four" or "three fourths".
Numerator and denominator both are allowed to be in the range (-1e12, 1e12).
The ITN-interpreting code must be prepared to handle zero denominators.
-->
<RULE NAME="GRID_FRACTION" ID="GRID_FRACTION" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="1">
<O>
<!-- Optional whole part -->
<RULEREF NAME="GRID_INTEGER" PROPNAME="WHOLE" PROPID="WHOLE"/>
<P>
and
</P>
</O>
<L>
<P>
<L>
<P>
<RULEREF NAME="GRID_INTEGER" PROPNAME="NUMERATOR" PROPID="NUMERATOR"/>
</P>
<P>
<RULEREF NAME="GRID_DIGIT_NUMBER" PROPNAME="NUMERATOR" PROPID="NUMERATOR"/>
</P>
<P PROPNAME="ZERO" PROPID="ZERO" VAL="0">
oh
</P>
</L>
<L>
<P>
over
</P>
<P>
?forward slash
</P>
</L>
<L>
<P>
<RULEREF NAME="GRID_INTEGER" PROPNAME="DENOMINATOR" PROPID="DENOMINATOR"/>
</P>
<P>
<RULEREF NAME="GRID_DIGIT_NUMBER" PROPNAME="DENOMINATOR" PROPID="DENOMINATOR"/>
</P>
</L>
</P>
<P>
<L>
<P>
<P>
<RULEREF NAME="GRID_INTEGER" PROPNAME="NUMERATOR" PROPID="NUMERATOR"/>
</P>
<P>
<RULEREF NAME="GRID_DENOMINATOR" PROPNAME="DENOMINATOR" PROPID="DENOMINATOR"/>
</P>
</P>
<P>
<P>
one
</P>
<P>
<RULEREF NAME="GRID_DENOMINATOR_SINGULAR" PROPNAME="GRID_DENOMINATOR_SINGULAR" PROPID="DENOMINATOR"/>
</P>
</P>
</L>
</P>
</L>
</RULE>
<!--
DATE
Spoken dates.
-->
<RULE NAME="GRID_DATE" ID="GRID_DATE" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
<L>
<P>
<O>
<RULEREF NAME="day_of_week"/>
</O>
<L>
<P>
<RULEREF NAME="month"/>
<RULEREF NAME="day_of_month"/>
</P>
<P>
<RULEREF NAME="day_of_month"/>
<RULEREF NAME="month_capital_necessary"/>
</P>
</L>
<O>
<RULEREF NAME="GRID_YEAR" PROPNAME="YEAR" PROPID="YEAR"/>
</O>
</P>
<P>
<RULEREF NAME="month_year" PROPNAME="MONTHYEAR" PROPID="MONTHYEAR"/>
</P>
<P>
<RULEREF NAME="year_month" PROPNAME="YEARMONTH" PROPID="YEARMONTH"/>
</P>
</L>
</RULE>
<!--
YEAR
Spoken year.
-->
<RULE NAME="GRID_YEAR" ID="GRID_YEAR" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<L>
<P>
<P>
<RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
</P>
<O>
<P>
hundred
</P>
<O>
and
</O>
</O>
<P>
<RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
</P>
</P>
<P>
<RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
</P>
<P MIN="4" MAX="4">
<RULEREF NAME="digit" PROPNAME="ONEDIGIT" PROPID="ONEDIGIT"/>
</P>
<P>
<P PROPNAME="TWOTHOUSAND" PROPID="TWOTHOUSAND" VAL="2000">
two thousand
</P>
<O>
<O>
and
</O>
<L>
<P>
<RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
</P>
<P>
<RULEREF NAME="digit" PROPNAME="ONEDIGIT" PROPID="ONEDIGIT"/>
</P>
</L>
</O>
</P>
<!--
<P>
<P>
<RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
</P>
<P PROPNAME="DATE_HUNDREDS" PROPID="DATE_HUNDREDS" VAL="100">
hundred
</P>
</P>
-->
<P>
<RULEREF NAME="date_hundreds" PROPNAME="DATE_HUNDREDS" PROPID="DATE_HUNDREDS"/>
</P>
</L>
</RULE>
<!--
TIME
Spoken time.
-->
<RULE NAME="GRID_TIME" ID="GRID_TIME" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
<L>
<P>
<P>
<RULEREF NAME="clock_hour"/>
</P>
<P>
o'clock
</P>
<O>
<RULEREF NAME="am_pm"/>
</O>
</P>
<P>
<P>
<RULEREF NAME="clock_hour"/>
</P>
<O>
<RULEREF NAME="GRID_CLOCK_MINSEC" PROPNAME="MINUTE" PROPID="MINUTE"/>
</O>
<P>
<RULEREF NAME="am_pm"/>
</P>
</P>
<P>
<P>
<RULEREF NAME="GRID_INTEGER_999" PROPNAME="HOUR_COUNT" PROPID="HOUR_COUNT"/>
</P>
<L>
<P>
hours
</P>
<P>
hour
</P>
</L>
<O>
and
</O>
<L>
<P>
<P>
<RULEREF NAME="GRID_MINSEC" PROPNAME="MINUTE" PROPID="MINUTE"/>
</P>
<L>
<P>
minutes
</P>
<P>
minute
</P>
</L>
<O>
<O>
and
</O>
<P>
<RULEREF NAME="GRID_MINSEC" PROPNAME="SECOND" PROPID="SECOND"/>
</P>
<L>
<P>
seconds
</P>
<P>
second
</P>
</L>
</O>
</P>
<P>
<P>
<RULEREF NAME="GRID_MINSEC" PROPNAME="SECOND" PROPID="SECOND"/>
</P>
<L>
<P>
seconds
</P>
<P>
second
</P>
</L>
</P>
</L>
</P>
<P>
<O>
a
</O>
<P>
<RULEREF NAME="clocktime_qualifier"/>
</P>
<P>
<RULEREF NAME="clock_hour"/>
</P>
</P>
</L>
</RULE>
<!--
GRID_MINSEC
Formed as a properly-formed number
-->
<RULE NAME="GRID_MINSEC" ID="GRID_MINSEC" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<P>
<RULEREF NAME="minutes" PROPNAME="ONES" PROPID="ONES"/>
</P>
</RULE>
<!--
GRID_CLOCK_MINSEC
Formed as a properly-formed number
-->
<RULE NAME="GRID_CLOCK_MINSEC" ID="GRID_CLOCK_MINSEC" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<P>
<RULEREF NAME="clock_minutes" PROPNAME="ONES" PROPID="ONES"/>
</P>
</RULE>
<!--
GRID_STATEZIP
Names of US states and territories are ITNed only if followed by a zip code.
-->
<RULE NAME="GRID_STATEZIP" ID="GRID_STATEZIP" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
<O>
<RULEREF NAME="comma" PROPNAME="COMMA" PROPID="COMMA"/>
</O>
<L>
<P>
<P>
<RULEREF NAME="us_state"/>
</P>
<P>
<RULEREF NAME="GRID_ZIPCODE" PROPNAME="ZIPCODE" PROPID="ZIPCODE"/>
</P>
<O>
<O>
<RULEREF NAME="dash_slash"/>
</O>
<P>
<RULEREF NAME="GRID_ZIP_PLUS_FOUR" PROPNAME="FOURDIGITS" PROPID="FOURDIGITS"/>
</P>
</O>
</P>
<P>
<P>
<RULEREF NAME="can_province"/>
</P>
<P>
<RULEREF NAME="GRID_CAN_ZIPCODE" PROPNAME="ZIPCODE" PROPID="ZIPCODE"/>
</P>
</P>
</L>
</RULE>
<!--
GRID_ZIPCODE
Five digits, evaluated as a GRID_DIGIT_NUMBER
-->
<RULE NAME="GRID_ZIPCODE" ID="GRID_ZIPCODE" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<P MIN="5" MAX="5">
<RULEREF NAME="digit"/>
</P>
</RULE>
<!--
GRID_CAN_ZIPCODE
Alpha/Number/Alpha Number/Alpha/Number.
Those wacky canooks
-->
<RULE NAME="GRID_CAN_ZIPCODE" ID="GRID_CAN_ZIPCODE" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<P MIN="3" MAX="3">
<P>
<RULEREF NAME="alpha"/>
</P>
<P>
<RULEREF NAME="digit"/>
</P>
</P>
</RULE>
<!--
GRID_ZIP_PLUS_FOUR
Four digits
-->
<RULE NAME="GRID_ZIP_PLUS_FOUR" ID="GRID_ZIP_PLUS_FOUR" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<RULEREF NAME="four_digits"/>
</RULE>
<!--
GRID_DEGREES
Number and then the word "degree(s)"
Uses context to figure out what kind of degrees:
* Temperature: Fahrenheit or Celsius
* Angle measurement: optional minutes or seconds
* Directions: followed by NESW
-->
<RULE NAME="GRID_DEGREES" ID="GRID_DEGREES" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
<L>
<P>
<P>
<RULEREF NAME="number_all"/>
</P>
<P>
<RULEREF NAME="degrees"/>
</P>
<O>
<RULEREF NAME="temp_units"/>
</O>
</P>
<P>
<P>
<RULEREF NAME="GRID_INTEGER_NONNEG" PROPNAME="GRID_INTEGER_NONNEG" PROPID="GRID_INTEGER_NONNEG"/>
</P>
<P>
<RULEREF NAME="degrees"/>
</P>
<O>
<O>
and
</O>
<P>
<RULEREF NAME="GRID_MINSEC" PROPNAME="MINUTE" PROPID="MINUTE"/>
</P>
<L>
<P>
minutes
</P>
<P>
minute
</P>
</L>
</O>
<O>
<O>
and
</O>
<P>
<RULEREF NAME="GRID_MINSEC" PROPNAME="SECOND" PROPID="SECOND"/>
</P>
<L>
<P>
seconds
</P>
<P>
second
</P>
</L>
</O>
<O>
<RULEREF NAME="direction"/>
</O>
</P>
</L>
</RULE>
<!--
GRID_MEASUREMENT
Any sort of number (NUMBER, FLOAT, or FRACTION) followed by a unit
-->
<RULE NAME="GRID_MEASUREMENT" ID="GRID_MEASUREMENT" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
<L>
<P>
<RULEREF NAME="GRID_FP_NUMBER" PROPNAME="NUMBER" PROPID="NUMBER"/>
</P>
<P>
<RULEREF NAME="GRID_INTEGER" PROPNAME="NUMBER" PROPID="NUMBER"/>
</P>
<P>
<RULEREF NAME="GRID_FRACTION" PROPNAME="NUMBER" PROPID="NUMBER"/>
</P>
</L>
<L>
<P>
<RULEREF NAME="units"/>
</P>
<P>
<RULEREF NAME="commonunits"/>
</P>
</L>
</RULE>
<!-- <RULE NAME="COMMON_GRID_MEASUREMENT" ID="COMMON_GRID_MEASURMEMENT" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="0">
<L>
<P>
<RULEREF NAME="GRID_FP_NUMBER" PROPNAME="NUMBER" PROPID="NUMBER"/>
</P>
<P>
<RULEREF NAME="GRID_INTEGER_20_MILLBILL" PROPNAME="NUMBER" PROPID="NUMBER"/>
</P>
<P>
<RULEREF NAME="GRID_FRACTION" PROPNAME="NUMBER" PROPID="NUMBER"/>
</P>
</L>
<P>
<RULEREF NAME="commonunits"/>
</P>
</RULE>-->
<!--
CURRENCY
Allows for dollars and optional cents, just cents, or a floating-point number
of dollars.
-->
<RULE NAME="GRID_CURRENCY" ID="GRID_CURRENCY" INTERPRETER="1" TOPLEVEL="ACTIVE" EXPORT="1">
<L>
<P>
<O>
<RULEREF NAME="NEGATIVE" PROPNAME="NEGATIVE" PROPID="NEGATIVE"/>
</O>
<L>
<P>
<P>
<RULEREF NAME="GRID_INTEGER_NONNEG" PROPNAME="DOLLARS" PROPID="DOLLARS"/>
</P>
<P>
<RULEREF NAME="currency_type"/>
</P>
<O>
currency
</O>
<O>
<O>
and
</O>
<P>
<RULEREF NAME="GRID_CENTS" PROPNAME="CENTS" PROPID="CENTS"/>
</P>
<O>
<RULEREF NAME="currency_small_type"/>
</O>
</O>
</P>
<P>
<P>
<RULEREF NAME="GRID_INTEGER_NONNEG" PROPNAME="DOLLARS" PROPID="DOLLARS"/>
</P>
<P>
and
</P>
<P>
<RULEREF NAME="GRID_CENTS" PROPNAME="CENTS" PROPID="CENTS"/>
</P>
<P>
<RULEREF NAME="currency_small_type"/>
</P>
</P>
<P>
<P>
<RULEREF NAME="GRID_INTEGER_MILLBILL" PROPNAME="DOLLARS" PROPID="DOLLARS"/>
</P>
<P>
<RULEREF NAME="currency_type"/>
</P>
</P>
</L>
</P>
<P>
<P>
<RULEREF NAME="GRID_INTEGER_NONNEG" PROPNAME="CENTS" PROPID="CENTS"/>
</P>
<P>
<RULEREF NAME="currency_small_type"/>
</P>
</P>
<P>
<P>
<RULEREF NAME="GRID_FP_NUMBER" PROPNAME="DOLLARS" PROPID="DOLLARS"/>
</P>
<P>
<RULEREF NAME="currency_type"/>
</P>
</P>
<P>
<P>
<RULEREF NAME="GRID_FP_NUMBER_NONNEG" PROPNAME="CENTS" PROPID="CENTS"/>
</P>
<P>
<RULEREF NAME="currency_small_type"/>
</P>
</P>
</L>
</RULE>
<RULE NAME="GRID_CENTS" ID="GRID_CENTS" INTERPRETER="1" TOPLEVEL="INACTIVE" EXPORT="1">
<L>
<P>
<RULEREF NAME="digit"/>
</P>
<P>
<RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
</P>
</L>
</RULE>
<!-- ************************************************************************
CARDINAL QUANTITIES
************************************************************************ -->
<!--
integer_base
The rule referenced by the number rules above
-->
<RULE NAME="integer_base">
<O>
<RULEREF NAME="NEGATIVE" PROPNAME="NEGATIVE" PROPID="NEGATIVE"/>
</O>
<P>
<RULEREF NAME="integer_base_nonneg"/>
</P>
</RULE>
<!--
integer_base_nonneg
Same as above except nonnegative
-->
<RULE NAME="integer_base_nonneg">
<L>
<P>
<RULEREF NAME="cardinal"/>
</P>
<P>
<RULEREF NAME="GRID_DIGIT_NUMBER" PROPNAME="GRID_DIGIT_NUMBER" PROPID="GRID_DIGIT_NUMBER"/>
</P>
</L>
</RULE>
<!--
cardinal
A cardinal is defined here as a number in [0, 1e12), properly
formed (not spoken digit by digit)
-->
<RULE NAME="cardinal">
<L>
<P>
<L>
<P>
<RULEREF NAME="big_part"/>
</P>
</L>
<O>
<O>
and
</O>
<P>
<!-- cardinal_999 part optional if the big_part is present -->
<RULEREF NAME="cardinal_999" PROPNAME="ONES" PROPID="ONES" VAL="1"/>
</P>
</O>
</P>
<P>
<P>
<RULEREF NAME="cardinal_99_nonzero" PROPNAME="HUNDREDS" PROPID="HUNDREDS" VAL="1"/>
</P>
<P>
hundred
</P>
<O>
<O>
and
</O>
<P>
<RULEREF NAME="cardinal_99_nonzero" PROPNAME="ONES" PROPID="ONES" VAL="1"/>
</P>
</O>
</P>
<P>
<!-- cardinal_999 part mandatory if the big_part is not present.
In this case, the cardinal_999 part must be at least 20 -->
<RULEREF NAME="cardinal_999" PROPNAME="ONES" PROPID="ONES" VAL="1"/>
</P>
</L>
</RULE>
<!--
big_part
A big_part is the part of a spoken number that is divisible by 1000. It
has to be in the range (-1e12, 1e12).
-->
<RULE NAME="big_part">
<L>
<P>
<RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
<P> billion </P>
<!-- billions are present, so millions and thousands are optional -->
<O>
<RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
<P> million </P>
</O>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
<P> thousand </P>
</O>
</P>
<P>
<RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
<P> million </P>
<!-- millions are present, so thousands are optional -->
<O>
<RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
<P> thousand </P>
</O>
</P>
<P>
<!-- billions and millions not present, so thousands are mandatory -->
<RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
<P> thousand </P>
</P>
</L>
</RULE>
<!--
cardinal_999
This is defined as a number in [0,1000).
-->
<RULE NAME="cardinal_999">
<L>
<P PROPNAME="ZERO" PROPID="ZERO" VAL="0">
zero
</P>
<P>
<!-- A number between 1 and 19 -->
<RULEREF NAME="onesfrag" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<!-- A "tens" number (20, 30,...) -->
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
<O>
<!-- Can be followed by a nonzero digit -->
<RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
</O>
</P>
<P>
<!-- A number at least 100 -->
<RULEREF NAME="hundredsfrag" PROPNAME="HUNDREDS" VAL="100"/>
<!-- optionally followed by tens and ones places -->
<O>
<L>
<P>
<!-- e.g. six hundred thirteen -->
<!-- Note that this case is not covered by the later case -->
<RULEREF NAME="onesfrag" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<!-- e.g. six hundred thirty two -->
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
<O>
<!-- ones place optional -->
<RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
</O>
</P>
</L>
</O>
</P>
</L>
</RULE>
<RULE NAME="cardinal_20_999">
<L>
<P>
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
<O>
<RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
</O>
</P>
<P>
<RULEREF NAME="hundredsfrag" PROPNAME="HUNDREDS" VAL="100"/>
<O>
<L>
<P>
<RULEREF NAME="onesfrag" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
<O>
<RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
</O>
</P>
</L>
</O>
</P>
</L>
</RULE>
<!--
cardinal_99
Defined as any integer in [0,100)
-->
<RULE NAME="cardinal_99">
<L>
<P>
<RULEREF NAME="cardinal_99_nonzero"/>
</P>
<P>
<RULEREF NAME="zero"/>
</P>
</L>
</RULE>
<RULE NAME="cardinal_99_nonzero">
<L>
<P>
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
<O><RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/></O>
</P>
<P> <RULEREF NAME="onesfrag" PROPNAME="ONES" VAL="1"/> </P>
</L>
</RULE>
<RULE NAME="NEGATIVE">
<L>
<P>
negative
</P>
<P>
minus
</P>
</L>
</RULE>
<RULE NAME="twodigit">
<L>
<P>
<P>
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
</P>
<O>
<RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
</O>
</P>
<P>
<RULEREF NAME="onesfrag_teens" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<L>
<P>
zero
</P>
<P>
oh
</P>
</L>
<P>
<RULEREF NAME="digit" PROPNAME="ONES" VAL="1"/>
</P>
</P>
</L>
</RULE>
<RULE NAME="hundredsfrag">
<L>
<L PROPNAME="HUNDREDS" PROPID="HUNDREDS">
<P VAL="1" VALSTR="1">a</P>
</L>
<P>
<RULEREF NAME="digit_nonzero"/>
</P>
</L>
<P>
hundred ?and
</P>
</RULE>
<RULE NAME="tensfrag">
<L PROPNAME="TENS" PROPID="TENS">
<P VAL="2" VALSTR="2">twenty</P>
<P VAL="3" VALSTR="3">thirty</P>
<P VAL="4" VALSTR="4">forty</P>
<P VAL="5" VALSTR="5">fifty</P>
<P VAL="6" VALSTR="6">sixty</P>
<P VAL="7" VALSTR="7">seventy</P>
<P VAL="8" VALSTR="8">eighty</P>
<P VAL="9" VALSTR="9">ninety</P>
</L>
</RULE>
<RULE NAME="onesfrag">
<L>
<P>
<RULEREF NAME="digit_nonzero"/>
</P>
<P>
<RULEREF NAME="onesfrag_teens"/>
</P>
</L>
</RULE>
<RULE NAME="onesfrag_teens">
<L PROPNAME="ONES" PROPID="ONES">
<P VAL="10" VALSTR="10">ten</P>
<P VAL="11" VALSTR="11">eleven</P>
<P VAL="12" VALSTR="12">twelve</P>
<P VAL="13" VALSTR="13">thirteen</P>
<P VAL="14" VALSTR="14">fourteen</P>
<P VAL="15" VALSTR="15">fifteen</P>
<P VAL="16" VALSTR="16">sixteen</P>
<P VAL="17" VALSTR="17">seventeen</P>
<P VAL="18" VALSTR="18">eighteen</P>
<P VAL="19" VALSTR="19">nineteen</P>
</L>
</RULE>
<RULE NAME="onesfrag_or_zero">
<L>
<P>
<RULEREF NAME="zero"/>
</P>
<P>
<RULEREF NAME="onesfrag"/>
</P>
</L>
</RULE>
<RULE NAME="digit_nonzero_or_one">
<L PROPNAME="DIGIT" PROPID="DIGIT">
<P VAL="2" VALSTR="2">two</P>
<P VAL="3" VALSTR="3">three</P>
<P VAL="4" VALSTR="4">four</P>
<P VAL="5" VALSTR="5">five</P>
<P VAL="6" VALSTR="6">six</P>
<P VAL="7" VALSTR="7">seven</P>
<P VAL="8" VALSTR="8">eight</P>
<P VAL="9" VALSTR="9">nine</P>
</L>
</RULE>
<RULE NAME="digit_nonzero">
<L>
<L PROPNAME="DIGIT" PROPID="DIGIT">
<P VAL="1" VALSTR="1">one</P>
</L>
<P>
<RULEREF NAME="digit_nonzero_or_one"/>
</P>
</L>
</RULE>
<RULE NAME="digit">
<L>
<L PROPNAME="DIGIT" PROPID="DIGIT">
<P VAL="0" VALSTR="0">zero</P>
<P VAL="0" VALSTR="0">oh</P>
</L>
<P>
<RULEREF NAME="digit_nonzero"/>
</P>
</L>
</RULE>
<RULE NAME="zero">
<L PROPNAME="ONES" PROPID="ONES">
<P VAL="0" VALSTR="0">zero</P>
</L>
</RULE>
<!-- ************************************************************************
ORDINAL QUANTITIES
************************************************************************ -->
<!--
big_part_ord
This is when the ordinal number ends in something divisible by 100, so
the last word will be either "billionth", "millionth", "thousandth", or
"hundredth"
-->
<RULE NAME="big_part_ord">
<L>
<P>
<RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
<P>
billionth
</P>
</P>
<P>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
<P>
billion
</P>
</O>
<RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
<P>
millionth
</P>
</P>
<P>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
<P>
billion
</P>
</O>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
<P>
million
</P>
</O>
<RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
<P>
thousandth
</P>
</P>
<P>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
<P>
billion
</P>
</O>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
<P>
million
</P>
</O>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
<P>
thousand
</P>
</O>
<RULEREF NAME="cardinal_99_nonzero" PROPNAME="HUNDREDS" PROPID="HUNDREDS"/>
<P>
hundredth
</P>
</P>
</L>
</RULE>
<!--
ordinal_999
This is an ordinal number between "zeroth" and "nine hundred ninety ninth"
-->
<RULE NAME="ordinal_999">
<L>
<P PROPNAME="ZERO" PROPID="ZERO" VAL="0">
zeroth
</P>
<P>
<!-- A number between 1st and 19th, or 20th, 30th, ...90th -->
<RULEREF NAME="onesfrag_ord" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<!-- Something like "thirty ninth". Note that "thirtieth" would be covered above -->
<P>
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
</P>
<P>
<RULEREF NAME="digit_nonzero_ord" PROPNAME="ONES" VAL="1"/>
</P>
</P>
<P>
<P>
<RULEREF NAME="hundredsfrag" PROPNAME="HUNDREDS" VAL="100"/>
</P>
<!-- Followed by either a one-word ordinal ("twelfth") or a two-word
ordinal ("thirty ninth") -->
<L>
<P>
<RULEREF NAME="onesfrag_ord" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<P>
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
</P>
<P>
<RULEREF NAME="digit_nonzero_ord" PROPNAME="ONES" VAL="1"/>
</P>
</P>
</L>
</P>
</L>
</RULE>
<!--
onesfrag_ord
These are the words with which an ordinal number less than 1000
could end
-->
<RULE NAME="onesfrag_ord">
<L PROPNAME="ONES" PROPID="ONES">
<!--<P VAL="0">zero</P>-->
<P VAL="1">first</P>
<P VAL="2">second</P>
<P VAL="3">third</P>
<P VAL="4">fourth</P>
<P VAL="5">fifth</P>
<P VAL="6">sixth</P>
<P VAL="7">seventh</P>
<P VAL="8">eighth</P>
<P VAL="9">ninth</P>
<P VAL="10">tenth</P>
<P VAL="11">eleventh</P>
<P VAL="12">twelfth</P>
<P VAL="13">thirteenth</P>
<P VAL="14">fourteenth</P>
<P VAL="15">fifteenth</P>
<P VAL="16">sixteenth</P>
<P VAL="17">seventeenth</P>
<P VAL="18">eighteenth</P>
<P VAL="19">nineteenth</P>
<P VAL="20">twentieth</P>
<P VAL="30">thirtieth</P>
<P VAL="40">fortieth</P>
<P VAL="50">fiftieth</P>
<P VAL="60">sixtieth</P>
<P VAL="70">seventieth</P>
<P VAL="80">eightieth</P>
<P VAL="90">ninetieth</P>
</L>
</RULE>
<RULE NAME="digit_nonzero_ord">
<L PROPNAME="DIGIT" PROPID="DIGIT">
<P VAL="1">first</P>
<P VAL="2">second</P>
<P VAL="3">third</P>
<P VAL="4">fourth</P>
<P VAL="5">fifth</P>
<P VAL="6">sixth</P>
<P VAL="7">seventh</P>
<P VAL="8">eighth</P>
<P VAL="9">ninth</P>
</L>
</RULE>
<!-- ************************************************************************
DENOMINATOR QUANTITIES
************************************************************************ -->
<!--
big_part_ord_den
Almost exactly the same as big_part_ord, except the ordinal part is plural.
-->
<RULE NAME="big_part_ord_den">
<L>
<P>
<RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
<P>
billionths
</P>
</P>
<P>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
<P>
billion
</P>
</O>
<RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
<P>
millionths
</P>
</P>
<P>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
<P>
billion
</P>
</O>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
<P>
million
</P>
</O>
<P>
<RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="THOUSANDS"/>
<P>
thousandths
</P>
</P>
</P>
<P>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="BILLIONS" PROPID="BILLIONS"/>
<P>
billion
</P>
</O>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="MILLIONS" PROPID="MILLIONS"/>
<P>
million
</P>
</O>
<O>
<RULEREF NAME="cardinal_999" PROPNAME="THOUSANDS" PROPID="MILLIONS"/>
<P>
thousand
</P>
</O>
<P>
<RULEREF NAME="cardinal_99_nonzero" PROPNAME="HUNDREDS" PROPID="HUNDREDS"/>
<P>
hundredths
</P>
</P>
</P>
</L>
</RULE>
<!--
ordinal_999_den
Same as ordinal_999, except plural, and no zeroths.
-->
<RULE NAME="ordinal_999_den">
<L>
<P>
<!-- A number between 1st and 19th, or 20th, 30th, ...90th -->
<RULEREF NAME="onesfrag_ord_den_or_half_quarter" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<!-- Something like "thirty ninth". Note that "thirtieth" would be covered above -->
<P>
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
</P>
<P>
<RULEREF NAME="digit_nonzero_ord_den" PROPNAME="ONES" VAL="1"/>
</P>
</P>
<P>
<P>
<RULEREF NAME="hundredsfrag" PROPNAME="HUNDREDS" VAL="100"/>
</P>
<!-- Followed by either a one-word ordinal ("twelfth") or a two-word
ordinal ("thirty ninth") -->
<L>
<P>
<RULEREF NAME="onesfrag_ord_den" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<P>
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
</P>
<P>
<RULEREF NAME="digit_nonzero_ord_den" PROPNAME="ONES" VAL="1"/>
</P>
</P>
</L>
</P>
</L>
</RULE>
<!--
ordinal_999_den_singular
Same as ordinal_999_den, except all endings must be singular
-->
<RULE NAME="ordinal_999_den_singular">
<L>
<P>
<!-- A number between 1st and 19th, or 20th, 30th, ...90th -->
<RULEREF NAME="onesfrag_ord_den_singular_or_half_quarter" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<!-- Something like "thirty ninth". Note that "thirtieth" would be covered above -->
<P>
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
</P>
<P>
<RULEREF NAME="digit_nonzero_ord_den_singular" PROPNAME="ONES" VAL="1"/>
</P>
</P>
<P>
<P>
<RULEREF NAME="hundredsfrag" PROPNAME="HUNDREDS" VAL="100"/>
</P>
<!-- Followed by either a one-word ordinal ("twelfth") or a two-word
ordinal ("thirty ninth") -->
<L>
<P>
<RULEREF NAME="onesfrag_ord_den_singular" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<P>
<RULEREF NAME="tensfrag" PROPNAME="TENS" VAL="10"/>
</P>
<P>
<RULEREF NAME="digit_nonzero_ord_den_singular" PROPNAME="ONES" VAL="1"/>
</P>
</P>
</L>
</P>
</L>
</RULE>
<!--
onesfrag_ord_den
Same as onesfrag_ord except plural.
-->
<RULE NAME="onesfrag_ord_den">
<L>
<P>
<L PROPNAME="ONES" PROPID="ONES">
<P VAL="3">thirds</P>
<P VAL="4">fourths</P>
<P VAL="5">fifths</P>
<P VAL="6">sixths</P>
<P VAL="7">sevenths</P>
<P VAL="8">eighths</P>
<P VAL="9">ninths</P>
<P VAL="10">tenths</P>
<P VAL="11">elevenths</P>
<P VAL="12">twelfths</P>
<P VAL="13">thirteenths</P>
<P VAL="14">fourteenths</P>
<P VAL="15">fifteenths</P>
<P VAL="16">sixteenths</P>
<P VAL="17">seventeenths</P>
<P VAL="18">eighteenths</P>
<P VAL="19">nineteenths</P>
<P VAL="20">twentieths</P>
<P VAL="30">thirtieths</P>
<P VAL="40">fortieths</P>
<P VAL="50">fiftieths</P>
<P VAL="60">sixtieths</P>
<P VAL="70">seventieths</P>
<P VAL="80">eightieths</P>
<P VAL="90">ninetieths</P>
</L>
</P>
</L>
</RULE>
<RULE NAME="onesfrag_ord_den_or_half_quarter">
<L>
<P>
<RULEREF NAME="onesfrag_ord_den"/>
</P>
<P>
<L PROPNAME="ONES" PROPID="ONES">
<P VAL="2">half</P>
<P VAL="4">quarter</P>
<P VAL="2">halves</P>
<P VAL="4">quarters</P>
</L>
</P>
</L>
</RULE>
<!--
onesfrag_ord_den_singular
Same as onesfrag_ord_den except singular.
-->
<RULE NAME="onesfrag_ord_den_singular">
<L>
<P>
<L PROPNAME="ONES" PROPID="ONES">
<P VAL="2">half</P>
<P VAL="3">third</P>
<P VAL="4">fourth</P>
<P VAL="5">fifth</P>
<P VAL="6">sixth</P>
<P VAL="7">seventh</P>
<P VAL="8">eighth</P>
<P VAL="9">ninth</P>
<P VAL="10">tenth</P>
<P VAL="11">eleventh</P>
<P VAL="12">twelfth</P>
<P VAL="13">thirteenth</P>
<P VAL="14">fourteenth</P>
<P VAL="15">fifteenth</P>
<P VAL="16">sixteenth</P>
<P VAL="17">seventeenth</P>
<P VAL="18">eighteenth</P>
<P VAL="19">nineteenth</P>
<P VAL="20">twentieth</P>
<P VAL="30">thirtieth</P>
<P VAL="40">fortieth</P>
<P VAL="50">fiftieth</P>
<P VAL="60">sixtieth</P>
<P VAL="70">seventieth</P>
<P VAL="80">eightieth</P>
<P VAL="90">ninetieth</P>
</L>
</P>
</L>
</RULE>
<RULE NAME="onesfrag_ord_den_singular_or_half_quarter">
<L>
<P>
<RULEREF NAME="onesfrag_ord_den_singular"/>
</P>
<P>
<L PROPNAME="ONES" PROPID="ONES">
<P VAL="2">half</P>
<P VAL="4">quarter</P>
</L>
</P>
</L>
</RULE>
<RULE NAME="digit_nonzero_ord_den">
<L>
<P>
<L PROPNAME="DIGIT" PROPID="DIGIT">
<P VAL="1">firsts</P>
<P VAL="2">seconds</P>
<P VAL="3">thirds</P>
<P VAL="4">fourths</P>
<P VAL="4">quarters</P>
<P VAL="5">fifths</P>
<P VAL="6">sixths</P>
<P VAL="7">sevenths</P>
<P VAL="8">eighths</P>
<P VAL="9">ninths</P>
</L>
</P>
</L>
</RULE>
<RULE NAME="digit_nonzero_ord_den_singular">
<L>
<P>
<L PROPNAME="DIGIT" PROPID="DIGIT">
<P VAL="1">first</P>
<P VAL="2">second</P>
<P VAL="3">third</P>
<P VAL="4">fourth</P>
<P VAL="5">fifth</P>
<P VAL="6">sixth</P>
<P VAL="7">seventh</P>
<P VAL="8">eighth</P>
<P VAL="9">ninth</P>
</L>
</P>
</L>
</RULE>
<!-- ************************************************************************
FLOATING-POINT NUMBER QUANTITIES
************************************************************************ -->
<!--
fp_number_nonneg
Floating-point numbers with up to 12 sig figs. Both the stuff to the left of the
decimal point and the stuff to the right of the decimal point can be either
NUMBERs or DIGIT_NUMBERs
-->
<RULE NAME="fp_number_nonneg">
<O>
<L>
<P>
<RULEREF NAME="GRID_INTEGER_NONNEG" PROPNAME="ONES" PROPID="ONES"/>
</P>
<P PROPNAME="ZERO" PROPID="ZERO" VAL="0">
oh
</P>
</L>
</O>
<L>
<P>
point
</P>
<P>
decimal
</P>
</L>
<L>
<P>
<RULEREF NAME="GRID_DIGIT_NUMBER" PROPNAME="FP_PART" PROPID="FP_PART"/>
</P>
<P>
<RULEREF NAME="GRID_INTEGER_999" PROPNAME="FP_PART" PROPID="FP_PART"/>
</P>
<P PROPNAME="POINT_ZERO" PROPID="POINT_ZERO" VAL="0">
oh
</P>
</L>
</RULE>
<!-- ************************************************************************
DATE QUANTITIES
************************************************************************ -->
<RULE NAME="day_of_week">
<L PROPNAME="DAY_OF_WEEK" PROPID="DAY_OF_WEEK">
<P VAL="1">Monday</P>
<P VAL="2">Tuesday</P>
<P VAL="3">Wednesday</P>
<P VAL="4">Thursday</P>
<P VAL="5">Friday</P>
<P VAL="6">Saturday</P>
<P VAL="7">Sunday</P>
</L>
</RULE>
<RULE NAME="month">
<L>
<P>
<RULEREF NAME="month_capital_necessary"/>
</P>
<P>
<L PROPNAME="MONTH" PROPID="MONTH">
<P VAL="3">march</P>
<P VAL="5">may</P>
</L>
</P>
</L>
</RULE>
<RULE NAME="month_capital_necessary">
<L PROPNAME="MONTH" PROPID="MONTH">
<P VAL="1">January</P>
<P VAL="2">February</P>
<P VAL="3">March</P>
<P VAL="4">April</P>
<P VAL="5">May</P>
<P VAL="6">June</P>
<P VAL="7">July</P>
<P VAL="8">August</P>
<P VAL="9">September</P>
<P VAL="10">October</P>
<P VAL="11">November</P>
<P VAL="12">December</P>
</L>
</RULE>
<RULE NAME="day_of_month">
<L PROPNAME="DAY_OF_MONTH" PROPID="DAY_OF_MONTH">
<P VAL="1">one</P>
<P VAL="1">first</P>
<P VAL="2">two</P>
<P VAL="2">second</P>
<P VAL="3">three</P>
<P VAL="3">third</P>
<P VAL="4">four</P>
<P VAL="4">fourth</P>
<P VAL="5">five</P>
<P VAL="5">fifth</P>
<P VAL="6">six</P>
<P VAL="6">sixth</P>
<P VAL="7">seven</P>
<P VAL="7">seventh</P>
<P VAL="8">eight</P>
<P VAL="8">eighth</P>
<P VAL="9">nine</P>
<P VAL="9">ninth</P>
<P VAL="10">ten</P>
<P VAL="10">tenth</P>
<P VAL="11">eleven</P>
<P VAL="11">eleventh</P>
<P VAL="12">twelve</P>
<P VAL="12">twelfth</P>
<P VAL="13">thirteen</P>
<P VAL="13">thirteenth</P>
<P VAL="14">fourteen</P>
<P VAL="14">fourteenth</P>
<P VAL="15">fifteen</P>
<P VAL="15">fifteenth</P>
<P VAL="16">sixteen</P>
<P VAL="16">sixteenth</P>
<P VAL="17">seventeen</P>
<P VAL="17">seventeenth</P>
<P VAL="18">eighteen</P>
<P VAL="18">eighteenth</P>
<P VAL="19">nineteen</P>
<P VAL="19">nineteenth</P>
<P VAL="20">twenty</P>
<P VAL="20">twentieth</P>
<P VAL="21">twenty one</P>
<P VAL="21">twenty first</P>
<P VAL="22">twenty two</P>
<P VAL="22">twenty second</P>
<P VAL="23">twenty three</P>
<P VAL="23">twenty third</P>
<P VAL="24">twenty four</P>
<P VAL="24">twenty fourth</P>
<P VAL="25">twenty five</P>
<P VAL="25">twenty fifth</P>
<P VAL="26">twenty six</P>
<P VAL="26">twenty sixth</P>
<P VAL="27">twenty seven</P>
<P VAL="27">twenty seventh</P>
<P VAL="28">twenty eight</P>
<P VAL="28">twenty eighth</P>
<P VAL="29">twenty nine</P>
<P VAL="29">twenty ninth</P>
<P VAL="30">thirty</P>
<P VAL="30">thirtieth</P>
<P VAL="31">thirty one</P>
<P VAL="31">thirty first</P>
</L>
</RULE>
<RULE NAME="year">
<L>
<P>
<!-- stuff like "two thousand one" -->
<RULEREF NAME="GRID_INTEGER"/>
</P>
<P>
<!-- stuff like "nineteen seventy seven" -->
<RULEREF NAME="GRID_DIGIT_NUMBER"/>
</P>
</L>
</RULE>
<RULE NAME="month_year">
<P>
<RULEREF NAME="month"/>
</P>
<P>
<RULEREF NAME="GRID_YEAR" PROPNAME="YEAR" PROPID="YEAR"/>
</P>
</RULE>
<RULE NAME="year_month">
<P>
<RULEREF NAME="GRID_YEAR" PROPNAME="YEAR" PROPID="YEAR"/>
</P>
<P>
<RULEREF NAME="month_capital_necessary"/>
</P>
</RULE>
<RULE NAME="date_hundreds">
<P>
<RULEREF NAME="twodigit" PROPNAME="TWODIGIT" PROPID="TWODIGIT"/>
</P>
<P>
hundred
</P>
</RULE>
<!-- ************************************************************************
TIME QUANTITIES
************************************************************************ -->
<RULE NAME="clock_hour">
<L PROPNAME="HOUR_CLOCK" PROPID="HOUR_CLOCK">
<P VAL="1">one</P>
<P VAL="2">two</P>
<P VAL="3">three</P>
<P VAL="4">four</P>
<P VAL="5">five</P>
<P VAL="6">six</P>
<P VAL="7">seven</P>
<P VAL="8">eight</P>
<P VAL="9">nine</P>
<P VAL="10">ten</P>
<P VAL="11">eleven</P>
<P VAL="12">twelve</P>
</L>
</RULE>
<RULE NAME="clocktime_qualifier">
<L PROPNAME="CLOCKTIME_QUALIFIER" PROPID="CLOCKTIME_QUALIFIER">
<P VAL="QUARTER_TO">quarter to</P>
<P VAL="QUARTER_TO">quarter til</P>
<P VAL="QUARTER_PAST">quarter past</P>
<P VAL="QUARTER_PAST">quarter after</P>
<P VAL="HALF_PAST">half past</P>
</L>
</RULE>
<RULE NAME="minutes">
<P PROPNAME="ONES" PROPID="ONES">
<L>
<P>
<P>
<RULEREF NAME="onesfrag_or_zero" PROPNAME="ONES" VAL="1"/>
</P>
</P>
<P>
<RULEREF NAME="clock_minutes"/>
</P>
</L>
</P>
</RULE>
<RULE NAME="clock_minutes">
<L>
<P>
<L>
<P>
oh
</P>
<P>
zero
</P>
</L>
<P>
<RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
</P>
</P>
<P>
<RULEREF NAME="onesfrag_teens" PROPNAME="ONES" VAL="1"/>
</P>
<P>
<P>
<RULEREF NAME="tensfrag_minutes" PROPNAME="TENS" PROPID="TENS" VAL="10"/>
</P>
<O>
<RULEREF NAME="digit_nonzero" PROPNAME="ONES" VAL="1"/>
</O>
</P>
</L>
</RULE>
<RULE NAME="tensfrag_minutes">
<L PROPNAME="TENS" PROPID="TENS">
<P VAL="2">twenty</P>
<P VAL="3">thirty</P>
<P VAL="4">forty</P>
<P VAL="5">fifty</P>
</L>
</RULE>
<RULE NAME="am_pm">
<L PROPNAME="AMPM" PROPID="AMPM">
<P VAL="AM">AM</P>
<P VAL="PM">PM</P>
</L>
<!--
<P PROPNAME="AM" PROPID="AM">
A.M.
</P>
<P PROPNAME="PM" PROPID="PM">
P.M.
</P>
</L>
-->
</RULE>
<!-- ************************************************************************
STATEZIP QUANTITIES
************************************************************************ -->
<RULE NAME="us_state">
<L PROPNAME="US_STATE" PROPID="US_STATE">
<P VAL="0" VALSTR="AL">Alabama</P>
<P VAL="1" VALSTR="AK">Alaska</P>
<P VAL="2" VALSTR="AS">American Samoa</P>
<P VAL="3" VALSTR="AZ">Arizona</P>
<P VAL="4" VALSTR="AR">Arkansas</P>
<P VAL="5" VALSTR="CA">California</P>
<P VAL="6" VALSTR="CO">Colorado</P>
<P VAL="7" VALSTR="CT">Connecticut</P>
<P VAL="8" VALSTR="DE">Delaware</P>
<P VAL="9" VALSTR="DC">District of Columbia</P>
<P VAL="9" VALSTR="DC">DC</P>
<P VAL="10" VALSTR="FM">Federated States of Micronesia</P>
<P VAL="11" VALSTR="FL">Florida</P>
<P VAL="12" VALSTR="GA">Georgia</P>
<P VAL="13" VALSTR="GU">Guam</P>
<P VAL="14" VALSTR="HI">Hawaii</P>
<P VAL="15" VALSTR="ID">Idaho</P>
<P VAL="16" VALSTR="IL">Illinois</P>
<P VAL="17" VALSTR="IN">Indiana</P>
<P VAL="18" VALSTR="IA">Iowa</P>
<P VAL="19" VALSTR="KS">Kansas</P>
<P VAL="20" VALSTR="KY">Kentucky</P>
<P VAL="21" VALSTR="LA">Louisiana</P>
<P VAL="22" VALSTR="ME">Maine</P>
<P VAL="23" VALSTR="MH">Marshall Islands</P>
<P VAL="24" VALSTR="MD">Maryland</P>
<P VAL="25" VALSTR="MA">Massachusetts</P>
<P VAL="26" VALSTR="MI">Michigan</P>
<P VAL="27" VALSTR="MN">Minnesota</P>
<P VAL="28" VALSTR="MS">Mississippi</P>
<P VAL="29" VALSTR="MO">Missouri</P>
<P VAL="30" VALSTR="MT">Montana</P>
<P VAL="31" VALSTR="NE">Nebraska</P>
<P VAL="32" VALSTR="NV">Nevada</P>
<P VAL="33" VALSTR="NH">New Hampshire</P>
<P VAL="34" VALSTR="NJ">New Jersey</P>
<P VAL="35" VALSTR="NM">New Mexico</P>
<P VAL="36" VALSTR="NY">New York</P>
<P VAL="37" VALSTR="NC">North Carolina</P>
<P VAL="38" VALSTR="ND">North Dakota</P>
<P VAL="39" VALSTR="MP">Northern Mariana Island</P>
<P VAL="40" VALSTR="OH">Ohio</P>
<P VAL="41" VALSTR="OK">Oklahoma</P>
<P VAL="42" VALSTR="OR">Oregon</P>
<P VAL="43" VALSTR="PA">Pennsylvania</P>
<P VAL="44" VALSTR="PR">Puerto Rico</P>
<P VAL="45" VALSTR="RI">Rhode Island</P>
<P VAL="46" VALSTR="SC">South Carolina</P>
<P VAL="47" VALSTR="SD">South Dakota</P>
<P VAL="48" VALSTR="TX">Texas</P>
<P VAL="49" VALSTR="UT">Utah</P>
<P VAL="50" VALSTR="VT">Vermont</P>
<P VAL="51" VALSTR="VA">Virginia</P>
<P VAL="52" VALSTR="VI">Virgin Islands</P>
<P VAL="53" VALSTR="WA">Washington</P>
<P VAL="54" VALSTR="WV">West Virginia</P>
<P VAL="55" VALSTR="WI">Wisconsin</P>
<P VAL="56" VALSTR="WY">Wyoming</P>
</L>
</RULE>
<RULE NAME="can_province">
<L PROPNAME="CAN_PROVINCE" PROPID="CAN_PROVINCE">
<P VAL="0" VALSTR="AL">Alberta</P>
<P VAL="1" VALSTR="BC">British Columbia</P>
<P VAL="2" VALSTR="MB">Manitoba</P>
<P VAL="3" VALSTR="NB">new Brunswick</P>
<P VAL="3" VALSTR="NB">New Brunswick</P>
<P VAL="4" VALSTR="NF">Newfoundland and Labrador</P>
<P VAL="4" VALSTR="NF">Newfoundland</P>
<P VAL="4" VALSTR="NF">Labrador</P>
<P VAL="5" VALSTR="NT">Northwest Territories</P>
<P VAL="5" VALSTR="NT">northwest territories</P>
<P VAL="6" VALSTR="ON">Ontario</P>
<P VAL="7" VALSTR="PE">Prince Edward Island</P>
<P VAL="7" VALSTR="PE">Prince Edward island</P>
<P VAL="8" VALSTR="PQ">Quebec</P>
<P VAL="9" VALSTR="SK">Saskatchewan</P>
</L>
</RULE>
<RULE NAME="alpha">
<L PROPNAME="ALPHA" PROPID="ALPHA">
<P VAL="0" VALSTR="A">A.</P>
<P VAL="1" VALSTR="B">B.</P>
<P VAL="2" VALSTR="C">C.</P>
<P VAL="3" VALSTR="D">D.</P>
<P VAL="4" VALSTR="E">E.</P>
<P VAL="5" VALSTR="F">F.</P>
<P VAL="6" VALSTR="G">G.</P>
<P VAL="7" VALSTR="H">H.</P>
<P VAL="8" VALSTR="I">I.</P>
<P VAL="9" VALSTR="J">J.</P>
<P VAL="10" VALSTR="K">K.</P>
<P VAL="11" VALSTR="L">L.</P>
<P VAL="12" VALSTR="M">M.</P>
<P VAL="13" VALSTR="N">N.</P>
<P VAL="14" VALSTR="O">O.</P>
<P VAL="15" VALSTR="P">P.</P>
<P VAL="16" VALSTR="Q">Q.</P>
<P VAL="17" VALSTR="R">R.</P>
<P VAL="18" VALSTR="S">S.</P>
<P VAL="19" VALSTR="T">T.</P>
<P VAL="20" VALSTR="U">U.</P>
<P VAL="21" VALSTR="V">V.</P>
<P VAL="22" VALSTR="W">W.</P>
<P VAL="23" VALSTR="X">X.</P>
<P VAL="24" VALSTR="Y">Y.</P>
<P VAL="25" VALSTR="Z">Z.</P>
</L>
</RULE>
<RULE NAME="comma">
<L>
<P>
comma
</P>
<P>
,
</P>
</L>
</RULE>
<!-- ************************************************************************
PHONE NUMBER QUANTITIES
************************************************************************ -->
<!--
three_digits_phone
Area codes and exchanges never start with zero or one
-->
<RULE NAME="three_digits_phone">
<RULEREF NAME="digit_nonzero_or_one"/>
<P MIN="2" MAX="2">
<RULEREF NAME="digit"/>
</P>
</RULE>
<RULE NAME="four_digits">
<P MIN="4" MAX="4">
<RULEREF NAME="digit"/>
</P>
</RULE>
<RULE NAME="dash_slash">
<L>
<P>
-
</P>
<P>
dash
</P>
<P>
slash
</P>
</L>
</RULE>
<RULE NAME="one_plus">
<P>
one
</P>
<O>
<RULEREF NAME="dash_slash"/>
</O>
</RULE>
<RULE NAME="area_code">
<L>
<P>
<RULEREF NAME="three_digits_phone"/>
</P>
<L PROPNAME="AREA_CODE" PROPID="AREA_CODE">
<P VAL="800" VALSTR="800">
eight hundred
</P>
<P VAL="900" VALSTR="900">
nine hundred
</P>
</L>
</L>
</RULE>
<RULE NAME="extension">
<P MIN="1" MAX="8">
<RULEREF NAME="digit"/>
</P>
</RULE>
<!-- ************************************************************************
DEGREES QUANTITIES
************************************************************************ -->
<RULE NAME="degrees">
<L>
<P>
degrees
</P>
<P>
degree
</P>
</L>
</RULE>
<RULE NAME="temp_units">
<L PROPNAME="TEMP_UNITS" PROPID="TEMP_UNITS">
<P VALSTR="F">Fahrenheit</P>
<P VALSTR="C">Celsius</P>
<P VALSTR="C">Centigrade</P>
</L>
</RULE>
<RULE NAME="direction">
<L PROPNAME="DIRECTION" PROPID="DIRECTION">
<P VALSTR="N">north</P>
<P VALSTR="E">east</P>
<P VALSTR="S">south</P>
<P VALSTR="W">west</P>
</L>
</RULE>
<!-- ************************************************************************
MEASUREMENTS QUANTITIES
************************************************************************ -->
<!--
number_all
A number_all is any type of number recognized by ITN and will never be called
as a toplevel rule
-->
<RULE NAME="number_all">
<L>
<P>
<RULEREF NAME="GRID_INTEGER" PROPNAME="NUMBER" PROPID="NUMBER"/>
</P>
<P>
<RULEREF NAME="GRID_FP_NUMBER" PROPNAME="NUMBER" PROPID="NUMBER"/>
</P>
<P>
<RULEREF NAME="GRID_FRACTION" PROPNAME="NUMBER" PROPID="NUMBER"/>
</P>
</L>
</RULE>
<RULE NAME="units">
<L PROPNAME="UNITS" PROPID="UNITS">
<P VALSTR="ml">milliliter</P>
<P VALSTR="ml">milliliters</P>
<P VALSTR="kg">kilogram</P>
<P VALSTR="kg">kilograms</P>
<P VALSTR="kg">kilo</P>
<P VALSTR="kg">kilo</P>
<P VALSTR="kg">of a kilogram</P>
<P VALSTR="km">kilometer</P>
<P VALSTR="km">kilometers</P>
<P VALSTR="km">of a kilometer</P>
<P VALSTR="cm">centimeter</P>
<P VALSTR="cm">centimeters</P>
<P VALSTR="cm">of a centimeter</P>
<P VALSTR="mm">millimeter</P>
<P VALSTR="mm">millimeters</P>
<P VALSTR="nm">nanometer</P>
<P VALSTR="nm">nanometers</P>
<P VALSTR="mu">micron</P>
<P VALSTR="mu">microns</P>
<P VALSTR="tsp.">teaspoon</P>
<P VALSTR="tsp.">teaspoons</P>
<P VALSTR="tsp.">of a teaspoon</P>
<P VALSTR="tbsp.">tablespoon</P>
<P VALSTR="tbsp.">tablespoons</P>
<P VALSTR="tbsp.">of a tablespoon</P>
<P VALSTR="fl. oz.">fluid ounce</P>
<P VALSTR="fl. oz.">fluid ounces</P>
<P VALSTR="mg">milligram</P>
<P VALSTR="mg">milligrams</P>
<P VALSTR="mph">mile per hour</P>
<P VALSTR="mph">miles per hour</P>
<P VALSTR="kph">kilometer per hour</P>
<P VALSTR="kph">kilometers per hour</P>
<P VALSTR="ms">millisecond</P>
<P VALSTR="ms">milliseconds</P>
<P VALSTR="K">K.</P>
<P VALSTR="KB">kilobyte</P>
<P VALSTR="KB">kilobytes</P>
<P VALSTR="KB">K.B.</P>
<P VALSTR="KB">K. byte</P>
<P VALSTR="KB">K. bytes</P>
<P VALSTR="MB">megabyte</P>
<P VALSTR="MB">megabytes</P>
<P VALSTR="MB">M.B.</P>
<P VALSTR="MB">meg</P>
<P VALSTR="MB">megs</P>
<P VALSTR="GB">gigabyte</P>
<P VALSTR="GB">gigabytes</P>
<P VALSTR="GB">G.B.</P>
<P VALSTR="GB">gig</P>
<P VALSTR="GB">gigs</P>
<P VALSTR="TB">terabyte</P>
<P VALSTR="TB">terabytes</P>
<P VALSTR="TB">T.B.</P>
<P VALSTR="Hz">hertz</P>
<P VALSTR="MHz">megahertz</P>
<P VALSTR="W">watt</P>
<P VALSTR="W">watts</P>
<P VALSTR="kW">kilowatt</P>
<P VALSTR="kW">kilowatts</P>
<P VALSTR="kWh">kilowatt hour</P>
<P VALSTR="kWh">kilowatt hours</P>
</L>
</RULE>
<RULE NAME="commonunits">
<L PROPNAME="UNITS" PROPID="UNITS">
<P VALSTR="yd.">yard</P>
<P VALSTR="yds.">yards</P>
<P VALSTR="yd.">of a yard</P>
<P VALSTR="ft.">foot</P>
<P VALSTR="ft.">feet</P>
<P VALSTR="ft.">of a foot</P>
<P VALSTR="in.">inch</P>
<P VALSTR="in.">inches</P>
<P VALSTR="in.">of an inch</P>
<P VALSTR="m">meter</P>
<P VALSTR="m">meters</P>
<P VALSTR="m">of a meter</P>
<P VALSTR="qt.">quart</P>
<P VALSTR="qt.">quarts</P>
<P VALSTR="qt.">of a quart</P>
<P VALSTR="l">liter</P>
<P VALSTR="l">liters</P>
<P VALSTR="l">of a liter</P>
<P VALSTR="lb.">pound</P>
<P VALSTR="lbs.">pounds</P>
<P VALSTR="lb.">of a pound</P>
<P VALSTR="oz.">ounce</P>
<P VALSTR="oz.">ounces</P>
<P VALSTR="oz.">of an ounce</P>
<P VALSTR="g">gram</P>
<P VALSTR="g">grams</P>
<P VALSTR="g">of a gram</P>
</L>
</RULE>
<!-- ************************************************************************
CURRENCY QUANTITIES
************************************************************************ -->
<RULE NAME="currency_type">
<L PROPNAME="CURRENCY_TYPE" PROPID="CURRENCY_TYPE">
<P VALSTR="$">dollar</P>
<P VALSTR="$">dollars</P>
<P VALSTR="£">pound</P>
<P VALSTR="£">pounds</P>
</L>
</RULE>
<RULE NAME="currency_small_type">
<L PROPNAME="CURRENCY_SMALL_TYPE" PROPID="CURRENCY_SMALL_TYPE">
<P VALSTR="¢">cent</P>
<P VALSTR="¢">cents</P>
<P VALSTR="p">penny</P>
<P VALSTR="p">pence</P>
</L>
</RULE>
</GRAMMAR>