以下に示すのは、「open a file.」「please move the window.」といったコマンドに対応した簡単な文法である。この文法は、別々定義されたさらに上級の文法(ここには示さないが)を参照する。
ABNF形式
#ABNF 1.0 ISO-8859-1; language en;mode voice; root $basicCmd; alias $(http://www.sayplease.com/politeness.gram) $$polite; meta "author" is "Stephanie Williams"; /** * Basic command. * @example please move the window * @example open a file */ public $basicCmd = $$polite#startPolite $command $$polite#endPolite; $command = $action $object; $action = /10/ open {'OPEN'} | /2/ close {'CLOSE'} | /1/ delete {'DELETE'} | /1/ move {'MOVE'}; $object = [the | a] (window | file | menu);
XML形式
<?xml version="1.0"?> <grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en" version="1.0" mode="voice" root="basicCmd"> <alias name="polite" uri="http://www.sayplease.com/politeness.xml"/> <meta name="author" content="Stephanie Williams"/> <rule id="basicCmd" scope="public"> <example> please move the window </example> <example> open a file </example> <ruleref alias="polite#startPolite"/> <ruleref uri="#command"/> <ruleref alias="polite#endPolite"/> </rule> <rule id="command"> <ruleref uri="#action"/> <ruleref uri="#object"/> </rule> <rule id="action"> <one-of> <item weight="10"> open <tag>'OPEN'</tag> </item> <item weight="2"> close <tag>'CLOSE'</tag> </item> <item weight="1"> delete <tag>'DELETE'</tag> </item> <item weight="1"> move <tag>'MOVE'</tag> </item> </one-of> </rule> <rule id="object"> <item repeat="0-1"> <one-of> <item> the </item> <item> a </item> </one-of> </item> <one-of> <item> window </item> <item> file </item> <item> menu </item> </one-of> </rule> </grammar>
次の2つの文法は、XML形式およびABNF形式の両文法においての参照を示している。
ABNF:http://www.example.com/places.gram
#ABNF 1.0 ISO-8859-1; language en;mode voice; root $city_state; // No aliases in this referenced grammar. public $city = Boston | Philadelphia | Fargo; public $state = Florida | North Dakota | New York; // References to local rules // Artificial example allows "Boston, Florida!" public $city_state = $city $state;
ABNF:http://www.example.com/booking.gram
#ABNF 1.0 ISO-8859-1; language en; mode voice; alias $(http://www.example.com/places.gram) $$someplaces; // Reference by URI syntax $flight = I want to fly to $(http://www.example.com/places.gram#city); // Reference using alias name $exercise = I want to walk to $$someplaces#state; // Reference to root rule using an alias reference $wet = I want to swim to $$someplaces;
XML:http://www.example.com/places.xml
<?xml version="1.0"?> <grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en" version="1.0" root="city_state" mode="voice"> <rule id="city" scope="public"> <one-of> <item>Boston</item> <item>Philadelphia</item> <item>Fargo</item> </one-of> </rule> <rule id="state" scope="public"> <one-of> <item>Florida</item> <item>North Dakota</item> <item>New York</item> </one-of> </rule> <!-- Reference by URI to a local rule --> <!-- Artificial example allows "Boston, Florida"! --> <rule id="city_state" scope="public"> <ruleref uri="#city"/> <ruleref uri="#state"/> </rule> </grammar>
XML:http://www.example.com/booking.xml
<?xml version="1.0"?> <grammar xmlns="http://www.w3.org/2001/06/grammar" xml:lang="en" version="1.0" mode="voice"> <alias name="someplaces" uri="http://www.example.com/places.xml"/> <!-- Using URI syntax --> <rule id="flight"> I want to fly to <ruleref uri="http://www.example.com/places.xml#city"/> </rule> <!-- Using alias syntax --> <rule id="exercise"> I want to walk to <ruleref alias="someplaces#state"/> </rule> <!-- Reference to root rule of a grammar by alias --> <rule id="wet"> I want to swim to <ruleref alias="someplaces"/> </rule> </grammar>