Operator Grammar and Operator Precedence Grammar
来源:互联网 发布:可牛淘宝图片助手 编辑:程序博客网 时间:2024/05/22 17:13
考虑文法
尽管上面这个是Operator Grammar, 但是它是Ambiguous的。 但是尽管如此,Operator Precedence Parser是惟一的可以Parse Ambiguous Grammar 的 Parser。 它是怎样Parse的呢?它是建立了一个Operator Relation Table的表格。 通过这个Operator Relation Table就可以进行Parsing。 让我们来看这个Ambiguous Grammar:
其中的Operator有:
i + * $($ is always included)
i
.> .> .>
+ <.
.>(left associative) <. .>
* <. .>
.> .>
$ <. <. <. cessfuk
表示成功succ
有几点要记住:
1.2个operator不会side by side的出现,所以相同的两个不用比较。
如果强行比出结果要报错。
2.identifier 的优先级始终比任何的 operator要高, $的优先级比任何的operator要低。所以i的优先级大于+,*。
3.如果有2个+(++)in the expression, the first + that you will execute is the left one.因为+ 是left associative。
4.也是left associative。所以两个相邻的时候先execute左边那个。
也就是说,即使给出的grammar是ambiguous的,但是我们也能够通过Operator Relation Table确定他们之间的优先级。
- Operator Grammar and Operator Precedence Grammar
- C++ Operator Precedence and associativity
- R:Operator Syntax and Precedence
- 14.2.1 Operator precedence and associativity
- python studying ---- keyword and operator precedence
- C++ Operator Precedence
- C++ Operator Precedence
- Operator Precedence Hierarchy
- C++ Operator Precedence
- C++ Operator Precedence
- C++ Operator Precedence
- C++ Operator Precedence
- zz C++ Operator Precedence
- C++ Operator Precedence
- C + + operator precedence list
- C++ Operator Precedence
- rc : C++ Operator Precedence
- [C++]C++ Operator Precedence
- distcp传输文件俩边hdfs的blocksize不同报错
- Thinkphp通过标签扩展实现验证码
- 不值一提的计算机基础教程-2-内存
- Django-表单
- JavaScript学习-匿名函数和闭包
- Operator Grammar and Operator Precedence Grammar
- 进程的状态转换、进程间通信的方式
- 第一天前端学习的内容和心得
- 普及练习场 交叉模拟 均分纸牌
- Go语言学习笔记(一)
- Java接口
- 什么是对象,为什么要面向对象,怎么才能面向对象?
- 面向组件编程之Unity 5.normalized不改变原向量,Normalize改变原向量
- IO流(11)--LineNumberReader()