## 構建語法
MSC SDK 識別語法主要為兩種:ABNF 和 BNF 格式。前者用于在線語法識別,后者用于離線語法識別。本文只對構建和使用語法的 SDK 調用過程進行介紹,關于語法的規則說明,請參考[語法開發指南](http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=7595);關于上傳應用級(對同一APPID所有設備均生效)語法文件,參考[訊飛開放平臺](http://www.xfyun.cn/services/online_asr?tab_index=1),以及[《MSC Reference Manual.html》](http://mscdoc.xfyun.cn/android/api)關于 SpeechRecognizer 類的說明。
### 構建ABNF語法
如前文所述,ABNF 語法為在線識別使用的語法,故在構建時,應指定引擎類型為在線引擎,構建時的語法類型為 ABNF,如:
~~~
// 設置引擎類型
mAsr.setParameter( SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD );
/* 其中 "abnf" 指定語法類型為 ABNF, grammarContent 為語法內容,grammarListener 為構建結果監聽器*/
ret = mAsr.buildGrammar( "abnf", grammarContent, grammarListener );
~~~
構建語法狀態通過監聽器 grammarListener 獲取,當構建成功時,將在回調中返回一個 grammarID,將在使用語法識別時用到。
### 構建BNF語法
BNF語法為離線識別使用的語法,在構建時,除了指定引擎為本地引擎,語法類型為BNF外,還必須指定離線資源的路徑(MSC模式下,需下載使用對應的離線識別SDK),語法構建的路徑——本地語法構建結果文件保存的路徑:
~~~
// 設置引擎類型
mAsr.setParamter( SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL );
// 設置引擎模式
mAsr.setParamter( SpeechConstant.ENGINE_MODE, engineMode );
if( SpeechConstant.MODE_MSC.equals(engineMode) ){
// 設置語法結果文件保存路徑,以在本地識別時使用
mAsr.setParameter( ResourceUtil.GRM_BUILD_PATH, grmPath );
//設置識別資源路徑
mAsr.setParameter( ResourceUtil.ASR_RES_PATH, asrResPath );
}
/* 其中 "bnf" 指定語法類型為 BNF, grammarContent 為語法內容,grammarListener 為構建結果監聽器*/
ret = mAsr.buildGrammar( "bnf", grammarContent, grammarListener );
~~~
構建語法狀態通過監聽器 grammarListener 獲取,當構建成功時,語法文件將保存到由 grmPath 指定的目錄中,將在語法識別時用到(MSC 模式下)。