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确定他们之间的优先级。