bison 优先级写法 和嵌套写法
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
bison 优先级写法和嵌套写法
Bison 是一种语法分析器生成器,它使用一种类似于EBNF(扩展巴科斯范式)的语法来描述语法规则。
在Bison 中,可以使用优先级和结合性来定义语法规则的优先级。
优先级是指同一优先级中的运算符的优先级顺序。
Bison 允许用户通过定义符号和它们对应的优先级值来设置运算符的优先级。
以下是一个示例,其中定义了一些运算符及其优先级值:
```sql
%left AND OR NOT
%left PLUS MINUS
%left TIMES DIVIDE
```
在上面的示例中,`%left` 指定左结合性,这意味着这些运算符按照从左到右的顺序进行结合。
在每个运算符之前都指定了一个优先级值,这些值用于确定运算符的优先级顺序。
例如,`AND`、`OR` 和`NOT` 的优先级值较低,而`PLUS` 和`MINUS` 的优先级值较高,因此它们具有更高的优先级。
嵌套是指在一个表达式中包含另一个表达式的语法结构。
Bison 使用括号来指定嵌套表达式的优先级。
例如:
```css
expr: expr AND expr
| expr OR expr
| NOT expr
| '(' expr ')'
| atom
```
在上面的示例中,括号用于指定嵌套表达式的优先级。
例如,在`expr AND expr` 中,两个表达式是嵌套的,因此它们的优先级较高。
同样,在`expr OR expr` 中,两个表达式也是嵌套的,因此它们的优先级也较高。
最后,通过`NOT expr` 可以反转整个表达式的真假值。