Skip to content

Latest commit

 

History

History
95 lines (65 loc) · 2.25 KB

condition_grammar.md

File metadata and controls

95 lines (65 loc) · 2.25 KB

概念及语法

基本概念

条件原语

  • 条件原语是基本的内置条件判断单元,执行某种比较来判断是否满足条件
// 如果请求host是"bfe-networks.com"或"bfe-networks.org", 返回true
req_host_in("bfe-networks.com|bfe-networks.org") 

条件表达式

  • 条件表达式是多个条件原语与操作符(例如与、或、非)的组合
// 如果请求域名是"bfe-networks.com"且请求方法是"GET", 返回true
req_host_in("bfe-networks.com") && req_method_in("GET") 
  • 支持的操作符详见下文说明

条件变量

  • 可以将条件表达式赋值给一个变量,这个变量被定义为条件变量
// 将条件表达式赋值给变量bfe_host
bfe_host = req_host_in("bfe-networks.com") 

高级条件表达式

  • 高级条件表达式是多个条件原语和条件变量与操作符(例如与、或、非)的组合

  • 在高级条件表达式中,条件变量以$前缀作为标示

// 如果变量bfe_host为true且请求方法是"GET",返回true
$bfe_host && req_method_in("GET") 

语法说明

条件原语的语法

条件原语的形式如下:

func_name(params)
  • func_name是条件原语名称
  • params是条件原语的参数,可能是0个或多个
  • 返回值类型是bool

条件表达式的语法

条件表达式(CE: Condition Expression)的语法定义如下:

CE = CE && CE
   | CE || CE
   | ( CE )
   | ! CE
   | ConditionPrimitive

高级条件表达式的语法

高级条件表达式(ACE: Advanced Condition Expression)的语法定义如下:

ACE = ACE && ACE
    | ACE || ACE
    | ( ACE )
    | ! ACE
    | ConditionPrimitive
    | ConditionVariable

操作符优先级

操作符的优先级和结合律与C语言中类似。下表列出了所有操作符的优先级及结合律。操作符从上至下按操作符优先级降序排列。

优先级 操作符 含义 结合律
1 () 括号 从左至右
2 ! 逻辑非 从右至左
3 && 逻辑与 从左至右
4 || 逻辑或 从左至右