编辑: 无理的喜欢 | 2014-03-26 |
? 表达式必须包含三部分:变量声明,等号,变量定义.这三个部分合起来, 叫做 规则 ,在本文档中不严格的叫做 变量 . ? 变量声明以 $ 或者@(辅助符)开始,后续紧跟变量名称(vName),变量名 称可以是英文字母、数字、下划线的任意组合(反对中文),见到空白符视 为变量名结束. ? 变量定义(vDefinition)包含四种基本元素:终结词、其他变量、运算符、 辅助符;
变量定义是这四种元素在符合文法要求情况下的各种组合. 3.2. 终结词 在文法中,终结词不能被继续扩展.它定义了用户输入可能表达的实体,句 文法匹配最终的目的就是识别出这些终结词.例如在下面的文法中: $fee = 手机费 | 话费;
手机费 、 话费 就是终结词.而$fee 就不是. 目前定义的终结词包括以下这些: 终结词类型 示例 英文(半角) a abc 数字(半角)
1 科大讯飞语义开放平台 《abnf 文法规范》
12 1234 汉字 好 中国 特殊字符 4.1 节 以上各种组合 3.3. 变量分类 一般只需要使用$,其后加规则名来定义一个规则.规则名可以包含中文,但 不推荐. 3.3.1. 显式和隐式变量的效果 以下截图取自 2.0 引擎执行 weather 业务的结果 $w2_2{biz:weather} = [$query{opera:query}] $date{param:date} [$interval] [$time] [$SW_De] [$place] [$here] [$SW_De] [$interval] $r1 [情况|状况];
其生成的调试信息为: 可以清楚的看到 w2 引用了 w2_2. 如果定义 w2_2 为隐式变量, 科大讯飞语义开放平台 《abnf 文法规范》
13 @w2_2{biz:weather} = [$query{opera:query}] $date{param:date} [$interval] [$time] [$SW_De] [$place] [$here] [$SW_De] [$interval] $r1 [情况|状况];
调试信息为: 用@定义的变量不会输出到调试信息中,也就没有精细结构. 3.3.2. 变量引用 变量引用有三类 1. 本地引用:引用本文法中所定义的变量. 2. 外部引用:引用其他文档中定义的变量. 3. 预定义变量引用:引用系统预定义的特殊变量 这三类引用的格式已经统一到本地引用的格式. 3.3.2.1. 本地引用 对于本地引用,仍以前面的话费查询的文法为例,如下 $want = 要|想;
$查询 = 查|查询;
$费用 = 手机费 | 话费;
$task_final = [我] [$want] $查询 $费用;
科大讯飞语义开放平台 《abnf 文法规范》
14 其中最后一行变量$task_final 的定义部分的$want、$查询、$费用三个变 量即为本地引用,它们都是在本文档内定义的. 3.3.2.2. 外部引用 外部引用的格式和本地引用一样.和C编程语言保持一致.但是需要两点: 1. 被引用的规则必须用 public 修饰,声明为公有变量;
2. 引用者的头部中使用#include XXX ;
包含需要引用的文法文件.然后 就可以像引用本地变量一样引用外部的变量. include 中使用相对路径,且一定要以分号结尾,并写在文法头部. 举例:schedule.abnf 引用 common.abnf 中的$DateTime: 另外需要特别注意的是,外部引用时,不能出现循环引用,即A引用 B,B 不能再引用 A. 3.3.2.3. 转义字符变量和通配符 所有的特殊变量均已 $_ti_ (英文半角)开头,以下划线 _(英文半角)结尾, 注意, 此形式的变量都作为系统预留, 用户定义的变量不能采用这样的形式. 目前主要有两大类特殊变量. 科大讯飞语义开放平台 《abnf 文法规范》
15 第一, 在文法中用到的特殊意义的符号, 要想出现在文法中作为匹配实体 (终 结词),需要给它们特殊的格式,此时需使用特殊变量. 以下本版本不支持 但可以进行转义 $_ti_blank_ 空格或制表符 $_ti_space_ 空格 $_ti_tab_ 制表符 $_ti_backslash_ \ $_ti_slash_ / $_ti_dollar_ $ $_ti_semicolon_ ;