login  |  register  |  downloads  |  blog

Home > Documentation > Grammar Language Reference

Grammar Language Reference

This document gives a formal definition of the syntax of the Grammar Languages supported by NuGram IDE and NuGram Server. The syntax is itself described using an EBNF grammar.

The language described here is a proper superset of the ABNF language defined in the Speech Recognition Grammar Specification Version 1.0, a W3C Recommandation published on March 16, 2004.

Grammar

A grammar is composed of a series of headers followed by defining forms.
  #ABNF 1.0 encoding;

  Headers
  Top-forms

Headers

All the standard ABNF headers are supported. The difference is that each value can be made dynamic by using the @string directive.

 Headers --> Header *
   
 Header
   --> 'mode' ( 'voice' | 'dtmf'  | Dynamic-String ) ';'
   --> 'root' ( LocalRulename | Dynamic-String ) ';'
   --> 'language' ( Word | Dynamic-String ) ';'
   --> 'lexicon' ( Uri | Dynamic-String ) ';'
   --> 'meta String 'is' ( String | Dynamic-String ) ';'
   --> 'tag-format ( Uri | Dynamic-String ) ';'
   
 Dynamic-String
   --> '@string' Expression 

Top forms

Top forms are either static rule definitions, dynamic rule definitions, macro definitions, or dynamic forms that will ultimately be expanded into dynamic rule or macro definitions.

A macro is an abstracted expansion that help reduce repetitive patterns in static or dynamic rules.

 Top-forms
   --> Top-Form *
  
 Top-Form
   --> Static-Rule-Definition
   --> Macro-Definition
   --> Top-Body-Form
  
 Top-Body-Form
   --> Dynamic-Rule-Definition
   --> Top-Foreach-Form
   --> Top-Let-Form
   --> Top-If-Form
  
 Top-Body
   --> Top-Body-Form *
  
 Static-Rule-Definition
   --> [ 'public' | 'private' ] LocalRulename '=' Expansion ';'
  
 Macro-Definition
   --> '@define' Identifier Formal-Parameters ':' Expansion '@end'
  
 Formal-Parameters
   --> '(' [ Identifier ( ',' Identifier ) * ] ')'
  
 Dynamic-Rule-Definition
   --> '@rule' Expression ':' Expansion '@end'
  
 Top-Foreach-Form
   --> '@for' '(' Identifier ':' Expression ')' Top-Body '@end'
  
 Top-Let-Form
   --> '@var' Identifier '=' Expression ( ',' Identifier '=' Expression ) * ':'
           Top-Body
       '@end'
  
 Top-If-Form
   --> '@if' '(' Expression ')' Top-Body
         ( '@elseif' '(' Expression ')' Top-Body ) *
         [ '@else' Top-Body ]
       '@end'

Expansion

Expansions are what we find at the right-hand side of a grammar rule definition.

 Expansion
   --> Static-Alternatives
  
 Static-Alternatives
   --> Static-Sequence ( '|' Static-Sequence ) *
  
 Static-Sequence
   --> [ Weight ] Item 
    
 Weight
   --> weight
   --> '@weight' Expression 
    
 Item
   --> Simple-Item [ Repeat ]
  
 Repeat
   --> repeatSpecification
   --> '@repeat' Expression ',' Expression-Or-Dash ',' Expression-Or-Dash '@end'

(Dashes are used in dynamic repeat specifications to indicate an unknown or default value.)

 Expression-Or-Dash
   --> Expression
   --> '-'

 Simple-Item 
   --> Word
   --> Quoted-Word
   --> SemanticTag
   --> LocalRulename 
   --> ExternalRulename
   --> '(' Expansion ')'
   --> '[' Expansion ']'
   --> Dynamic-Item
  
 Dynamic-Item
   --> Dynamic-Word
   --> Dynamic-Tag
   --> Dynamic-Reference
   --> Dynamic-Alternative
   --> Dynamic-Sequence
   --> Macro-Call
   --> Let-Expansion
   --> Foreach-Expansion
   --> If-Expansion
   --> Fragment-Expansion
  
 Dynamic-Word        --> '@word' Expression 
 Dynamic-Reference   --> '@ref' Expression
 Dynamic-Tag         --> '@tag' Expression + '@end'
 Dynamic-Alternative --> '@alt' Expansion + '@end'
 Dynamic-Sequence    --> '@seq' Expansion + '@end'
 Macro-Call          --> '@call' Identifier Actual-Parameters
 Fragment-Expansion  --> '@fragment' Expression
  
 Foreach-Expansion
   --> '@for' '(' Identifier ':' Expression ')' Expansion '@end'
  
 Let-Expansion
   --> '@var' Identifier '=' Expression ( ',' Identifier '=' Expression ) * ':'
           Expansion 
       '@end'
  
 If-Expansion
   --> '@if' '(' Expression ')' Expansion
         ( '@elseif' '(' Expression ')' Expansion ) *
         [ '@else' Expansion ]
       '@end'

Expression

The set of legal expressions is a very limited subset of expressions ordinarily found in mainstream programming languages.

 Expression
   --> Or-Expression
  
 Or-Expression
   --> And-Expression [ '||' And-Expression ]
  
 And-Expression
   --> Not-Expression [ '&&' Not-Expression ]
  
 Not-Expression
   --> [ '!' Simple-Expression ]
  
 Simple-Expression
   --> Constant-Expression
   --> Identifier [ Field-or-Method-Call ]
   --> '(' Expression ')'
  
 Field-or-Method-Call
   --> '.' Identifier [ Actual-Parameters ]
  
 Actual-Parameters
   --> '(' [ Expression ( ',' Expression ) * ] ')'
  
 Constant-Expression
   --> 'null'
   --> 'false'
   --> 'true'
   --> Number
   --> String