<?xml version="1.0" encoding="UTF-8" ?>  
<grammar version="1.0" xml:lang="en-US" xmlns="http://www.w3.org/2001/06/grammar" tag-format="semantics/1.0" root="Main"> 
	<rule id="Main">
		<one-of>
			<item>
				I am <ruleref uri="#Cardinal_0_to_100"/> years old
    			<tag> out.ages = rules.latest(); </tag>
			</item>
		</one-of>
	</rule>
<!-- Cardinal._value: integer [0...1,000,000] -->
<rule id="Cardinal" scope="public">
  <example> one </example>
  <example> nine thousand </example>
  <example> four hundred and fifty six thousand three hundred and sixty two </example>
  <one-of>
    <item>
      <ruleref uri="#Cardinal_0" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <ruleref uri="#Cardinal_1_to_999" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <ruleref uri="#Cardinal_1000_to_999999" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <item repeat="0-1">
        <one-of>
          <item> a </item>
          <item> one </item>
        </one-of>
      </item>
      million
      <tag> out._value = 1000000;</tag>
    </item>
  </one-of>
</rule>

<!-- Cardinal_0._value: integer [0] -->
<rule id="Cardinal_0" scope="public">
	<example> zero </example>
	<one-of>
		<item>zero</item>
		<item>oh</item>
	</one-of>
	<tag> out._value = 0; </tag>
</rule>

<!-- Cardinal_0_to_9._value: integer [0...9] -->
<rule id="Cardinal_0_to_9" scope="public">
  <example> one </example>
  <example> two </example>
  <example> five </example>
  <example> nine </example>
  <one-of>
    <item>
      <ruleref uri="#Cardinal_0" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <ruleref uri="#Cardinal_1_to_9" />
      <tag> out = rules.latest(); </tag>
    </item>
  </one-of>
</rule>

<!-- Cardinal_0_to_10._value: integer [0...10] -->
<rule id="Cardinal_0_to_10" scope="public">
  <example> one </example>
  <example> two </example>
  <example> five </example>
  <example> ten </example>
  <one-of>
    <item>
      <ruleref uri="#Cardinal_0_to_9" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      ten <tag> out._value = 10; </tag>
    </item>
  </one-of>
</rule>

<!-- Cardinal_0_to_100._value: integer [0...100] -->
<rule id="Cardinal_0_to_100" scope="public">
  <example> one </example>
  <example> twenty three </example>
  <example> ninety five </example>
  <example> one hundred </example>
  <one-of>
    <item>
      <ruleref uri="#Cardinal_0" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <ruleref uri="#Cardinal_1_to_99" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <item repeat="0-1">
        <one-of>
          <item> a </item>
          <item> one </item>
        </one-of>
      </item>
      hundred <tag> out._value = 100; </tag>
    </item>
  </one-of>
</rule>

<!-- Cardinal_0_to_1000._value: integer [0...1000] -->
<rule id="Cardinal_0_to_1000" scope="public">
  <example> one </example>
  <example> twenty three </example>
  <example> two hundred and thirty </example>
  <example> one thousand </example>
  <one-of>
    <item>
      <ruleref uri="#Cardinal_0" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <ruleref uri="#Cardinal_1_to_999" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <item repeat="0-1">
        <one-of>
          <item> a </item>
          <item> one </item>
        </one-of>
      </item>
      thousand <tag> out._value = 1000; </tag>
    </item>
  </one-of>
</rule>

<!-- Cardinal_0_to_10000._value: integer [0...10000] -->
<rule id="Cardinal_0_to_10000" scope="public">
  <example> one </example>
  <example> twenty three </example>
  <example> two hundred and thirty </example>
  <example> ten thousand </example>
  <one-of>
    <item>
      <ruleref uri="#Cardinal_0" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <ruleref uri="#Cardinal_1_to_9999" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      ten thousand <tag> out._value = 10000; </tag>
    </item>
  </one-of>
</rule>


<!-- Cardinal_1_to_9._value: integer [1...9] -->
<rule id="Cardinal_1_to_9" scope="public">
  <example> one </example>
  <example> two </example>
  <example> five </example>
  <example> nine </example>
  <one-of>
    <item>
      one <tag> out._value = 1; </tag>
    </item>
    <item>
      two <tag> out._value = 2; </tag>
    </item>
    <item>
      three <tag> out._value = 3; </tag>
    </item>
    <item>
      four <tag> out._value = 4; </tag>
    </item>
    <item>
      five <tag> out._value = 5; </tag>
    </item>
    <item>
      six <tag> out._value = 6; </tag>
    </item>
    <item>
      seven <tag> out._value = 7; </tag>
    </item>
    <item>
      eight <tag> out._value = 8; </tag>
    </item>
    <item>
      nine <tag> out._value = 9; </tag>
    </item>
  </one-of>
</rule>

<!-- Cardinal_1_to_99._value: integer [1...99] -->
<rule id="Cardinal_1_to_99" scope="public">
  <example> one </example>
  <example> thirteen </example>
  <example> fifty nine </example>
  <one-of>
    <item>
      <ruleref uri="#Cardinal_1_to_9" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <ruleref uri="#Cardinal_10_to_19" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <ruleref uri="#Cardinal_20_to_99" />
      <tag> out = rules.latest(); </tag>
    </item>
  </one-of>
</rule>

<!-- Cardinal_1_to_999._value: integer [1...999] -->
<rule id="Cardinal_1_to_999" scope="public">
  <example> one </example>
  <example> thirteen </example>
  <example> fifty nine </example>
  <example> eight hundred sixty seven </example>
  <one-of>
    <item>
      <ruleref uri="#Cardinal_1_to_99" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <ruleref uri="#Cardinal_100_to_999" />
      <tag> out = rules.latest(); </tag>
    </item>
  </one-of>
</rule>

<!-- Cardinal_1_to_9999._value: integer [1...9999] -->
<rule id="Cardinal_1_to_9999" scope="public">
  <example> one </example>
  <example> thirteen </example>
  <example> fifty nine </example>
  <example> eight hundred sixty seven </example>
  <example> two thousand eight hundred sixty seven </example>
  <tag> out._value = 1; </tag>
  <one-of>
    <item>
      <ruleref uri="#Cardinal_1_to_999" />
      <tag> out = rules.latest(); </tag>
    </item>
    <item>
      <item repeat="0-1">
        <one-of>
          <item>
            a <tag> out._value = 1; </tag>
          </item>
          <item>
            <ruleref uri="#Cardinal_1_to_9" />
            <tag> out = rules.latest(); </tag>
          </item>
        </one-of>
      </item>
      thousand <tag> out._value = out._value * 1000; </tag>

      <item repeat="0-1">
        <item repeat="0-1"> and </item>
        <ruleref uri="#Cardinal_1_to_999" />
        <tag> out._value = out._value + rules.latest()._value; </tag>
      </item>
    </item>
  </one-of>
</rule>


<!-- Cardinal_2_to_9._value: integer [2...9] -->
<rule id="Cardinal_2_to_9" scope="public">
  <example> two </example>
  <example> five </example>
  <example> nine </example>
  <one-of>
    <item>
      two <tag> out._value = 2; </tag>
    </item>
    <item>
      three <tag> out._value = 3; </tag>
    </item>
    <item>
      four <tag> out._value = 4; </tag>
    </item>
    <item>
      five <tag> out._value = 5; </tag>
    </item>
    <item>
      six <tag> out._value = 6; </tag>
    </item>
    <item>
      seven <tag> out._value = 7; </tag>
    </item>
    <item>
      eight <tag> out._value = 8; </tag>
    </item>
    <item>
      nine <tag> out._value = 9; </tag>
    </item>
  </one-of>
</rule>

<!-- Cardinal_10_to_19._value: integer [10...19] -->
<rule id="Cardinal_10_to_19" scope="public">
  <example> ten </example>
  <example> eleven </example>
  <example> nineteen </example>
  <one-of>
    <item>
      ten <tag> out._value = 10; </tag>
    </item>
    <item>
      eleven <tag> out._value = 11; </tag>
    </item>
    <item>
      twelve <tag> out._value = 12; </tag>
    </item>
    <item>
      thirteen <tag> out._value = 13; </tag>
    </item>
    <item>
      fourteen <tag> out._value = 14; </tag>
    </item>
    <item>
      fifteen <tag> out._value = 15; </tag>
    </item>
    <item>
      sixteen <tag> out._value = 16; </tag>
    </item>
    <item>
      seventeen <tag> out._value = 17; </tag>
    </item>
    <item>
      eighteen <tag> out._value = 18; </tag>
    </item>
    <item>
      nineteen <tag> out._value = 19; </tag>
    </item>
  </one-of>
</rule>

<!-- Cardinal_10_to_99._value: integer [10...99] -->
<rule id="Cardinal_10_to_99" scope="public">
  <example> twelve </example>
  <example> seventy nine </example>
  <one-of>
    <item>
      <ruleref uri="#Cardinal_10_to_19" />
    </item>
    <item>
      <ruleref uri="#Cardinal_20_to_99" />
    </item>
  </one-of>
  <tag> out._value = rules.latest()._value; </tag>
</rule>

<!-- Cardinal_20_to_29._value: integer [20...29] -->
<rule id="Cardinal_20_to_29" scope="public">
  <example> twenty </example>
  <example> twenty nine </example>
  twenty <tag> out._value = 20; </tag>
  <item repeat="0-1">
    <one-of>
      <item>
        one <tag> out._value = 21; </tag>
      </item>
      <item>
        two <tag> out._value = 22; </tag>
      </item>
      <item>
        three <tag> out._value = 23; </tag>
      </item>
      <item>
        four <tag> out._value = 24; </tag>
      </item>
      <item>
        five <tag> out._value = 25; </tag>
      </item>
      <item>
        six <tag> out._value = 26; </tag>
      </item>
      <item>
        seven <tag> out._value = 27; </tag>
      </item>
      <item>
        eight <tag> out._value = 28; </tag>
      </item>
      <item>
        nine <tag> out._value = 29; </tag>
      </item>
    </one-of>
  </item>
</rule>

<!-- Cardinal_20_to_99._value: integer [20...99] -->
<rule id="Cardinal_20_to_99" scope="public">
  <example> twenty one </example>
  <example> fifty seven </example>
  <example> ninety </example>
  <one-of>
    <item>
      twenty
      <tag> out._value = 20; </tag>
    </item>
    <item>
      thirty
      <tag> out._value = 30; </tag>
    </item>
    <item>
      forty
      <tag> out._value = 40; </tag>
    </item>
    <item>
      fifty
      <tag> out._value = 50; </tag>
    </item>
    <item>
      sixty
      <tag> out._value = 60; </tag>
    </item>
    <item>
      seventy
      <tag> out._value = 70; </tag>
    </item>
    <item>
      eighty
      <tag> out._value = 80; </tag>
    </item>
    <item>
      ninety
      <tag> out._value = 90; </tag>
    </item>
  </one-of>
  <item repeat="0-1">
    <ruleref uri="#Cardinal_1_to_9" />
    <tag> out._value = out._value + rules.latest()._value </tag>
  </item>
</rule>

<!-- Cardinal_100_to_999._value: integer [100...999] -->
<rule id="Cardinal_100_to_999" scope="public">
  <example> one hundred fifty seven </example>
  <example> eight hundred and thirty nine </example>
  <example> nine hundred </example>

  <tag> out._value = 1; </tag>
  <item repeat="0-1">
    <one-of>
      <item>
        a <tag> out._value = 1; </tag>
      </item>
      <item>
        <ruleref uri="#Cardinal_1_to_9" />
        <tag> out = rules.latest(); </tag>
      </item>
    </one-of>
  </item>
  hundred <tag> out._value = out._value * 100; </tag>

  <item repeat="0-1">
    <item repeat="0-1"> and </item>
    <ruleref uri="#Cardinal_1_to_99" />
    <tag> out._value = out._value + rules.latest()._value; </tag>
  </item>
</rule>

<!-- Cardinal_1000_to_999999._value: integer [1000...999999] -->
<rule id="Cardinal_1000_to_999999" scope="public">
  <example> one hundred fifty seven thousand three hundred and twenty seven</example>
  <example> eight hundred and thirty nine thousand </example>
  <example> ten thousand and fifty </example>

  <tag> out._value = 1; </tag>
  <item repeat="0-1">
    <one-of>
      <item>
        a <tag> out._value = 1; </tag>
      </item>
      <item>
        <ruleref uri="#Cardinal_1_to_999" />
        <tag> out = rules.latest(); </tag>
      </item>
    </one-of>
  </item>

  thousand <tag> out._value = out._value * 1000; </tag>

  <item repeat="0-1">
    <item repeat="0-1"> and </item>
    <ruleref uri="#Cardinal_1_to_999" />
    <tag> out._value = out._value + rules.latest()._value; </tag>
  </item>
</rule>
</grammar>