This documentation is archived and is not being maintained.

GrammarBuilder Class

Provides an easy-to-use mechanism for constructing complex Grammar objects from simple inputs.

Namespace: Microsoft.Speech.Recognition
Assembly: Microsoft.Speech (in microsoft.speech.dll)

public class GrammarBuilder
/** @attribute DebuggerDisplayAttribute("{DebugSummary}") */ 
public class GrammarBuilder
public class GrammarBuilder

The Speech platform offers the GrammarBuilder class as a simple mechanism for constructing Grammar objects programmatically. Unlike the construction of Grammar instances from objects created using the Microsoft.Speech.Recognition.SrgsGrammar namespace, creating Grammar objects through a GrammarBuilder does not require a detailed understanding of the Speech Recognition Grammar Specification (SRGS).

To construct a basic Grammar object from a GrammarBuilder the following steps are required:

1. Create an appropriate GrammarBuilder instance. For more information on creating Grammar objects see GrammarBuilder, Add and op_Addition.

2. Append to the GrammarBuilder objects which support grammar logic such as external reference to external rules, the Speech platform provided dictation grammars, System.String, Choices, SemanticResultKey, SemanticResultValue, and other GrammarBuilder instances. For more information, see Append.

3. Construct a Grammar object from the GrammarBuilder using a Microsoft.Speech.Recognition.Grammar(GrammarBuilder).

To support debugging, the current status of a GrammarBuilder can be written to a string using DebugShowPhrases.


The code sample below constructs a Grammar which recognizes either of two phrases: "Make background [color]" or "Configure background as [color]" using an explicit creation of and implicit conversion to GrammarBuilder instances.

Steps to make example Grammar recognizing “Make background [color]" or "Configure background as [color]":

1. Create a Choices (colorChoice) object containing a set of color names to recognize from; each associated with a particular RGB value.

2. Each name/value pair is encapsulated in an explicitly constructed new instance of SemanticResultValue (choiceResultValue).

3. A new GrammarBuilder object (resultValueBuilder) is constructed from choiceResultValue and then is added to the colorChoice instance by implicitly converting it to a GrammarBuilder instance, using Add(GrammarBuilder[]).

4. Implicitly create one GrammarBuilder object (makeBackgroundBuilder) with the string “Make background”.

5. Implicitly create a GrammarBuilder (choiceBuilder)from a SemanticResultValue instance containing a look up table created from the colorChoice object, and which can be can be referenced from other lookup tables with the string "RGB"

6. Append choiceBuilder to makeBackgroundBuilder using Append(GrammarBuilder).

7. Explicitly construct a second GrammarBuilder object, configureBackgroundBuilder, with the introductory phrases ("Make background" or "Configure background as").

8. Using Append(GrammarBuilder), append to a new instance of SemanticResultKey created from the colorChoice Choices object to configureBackgroundBuilder to add the color name/value pair lookup table that can be can be referenced with the string "RGB".

9. The constructor used to create the SemanticResultKey object (#ctor(System.String,Microsoft.Speech.Recognition.GrammarBuilder[])) require as its second argument a GrammarBuilder instance. In this case, the instance of GrammarBuilder is obtained through implicit conversion of the Choices instance, colorChoice.

10. A Choices object (bothChoices) is constructed from the two GrammarBuilder instances (configureBackgroundBuilder and makeBackgroundBuilder).

11. The bothChoices instance of Choices is then used to explicitly construct a new instance of a GrammarBuilder (bothBuilder), which is then passed to Grammar(GrammarBuilder) to create an instance of Grammar which will accept either command.

private Grammar CreateGrammarBuilderRGBSemantics2(params int[] info) {
    //Create a set of choices, each a lookup from a color name to RGB
    //Choices constructors do not take SematicResultValue, so cast SematicResultValue to GramarBuilder
    Choices colorChoice = new Choices();
    foreach (string colorName in System.Enum.GetNames(typeof(KnownColor))) {
        SemanticResultValue choiceResultValue =
            new SemanticResultValue(colorName, Color.FromName(colorName).ToARGB());
        GrammarBuilder resultValueBuilder = new GrammarBuilder(choiceResultValue);
    SemanticResultKey choiceResultKey = new SemanticResultKey("RGB", colorChoice);
    GrammarBuilder choiceBuilder = new GrammarBuilder(choiceResultKey);
    //Create two intermediate grammars with introductory phrase and the color choice
    GrammarBuilder makeBackgroundBuilder = "Make background";
    GrammarBuilder configureBackgroundBuilder = new GrammarBuilder("Configure background as");
    configureBackgroundBuilder.Append(new SemanticResultKey("RGB", colorChoice));

    //Create the final grammar recognizing either intermediate grammar 
    //By creating a choice from both GrammarBuilders above
    //Then constructing a GrammarBuilder from that choice
    //Then constructing the grammar.
    Choices bothChoices = new Choices(makeBackgroundBuilder, configureBackgroundBuilder);
    GrammarBuilder bothBuilder = new GrammarBuilder(bothChoices);
    Grammar grammar = new Grammar(bothBuilder);
    grammar.Name = "Make Background /Configure background as";
    return grammar;

All public static (Shared in Visual Basic) members of this type are thread-safe. Instance members are not guaranteed to be thread-safe.

Development Platforms

Windows XP Professional with Service Pack 2 (SP2), Windows Server 2003, Windows Vista Ultimate Edition, Windows Vista Business Edition, Windows Vista Enterprise Edition

Target Platforms