voice-recognition
Version:
Voice recognition for node native
500 lines (475 loc) • 12.9 kB
text/xml
<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>