Operator Precedence Functions

Estudies4you
Operator Precedence Functions
The operator precedence parsers never stores the table of precedence relations
Generally, this table is encoded by two functions f and g, known as precedence functions which map terminal symbols to integers
For any terminals a and b the two functions f and g is defined as
                f(a) < g(b) whenever a <. b
                f(a) = g(b) whenever a $\overset{.}{\mathop{=}}\,$  b
                f(a) > g(b) whenever a .> b
After f and g are defined, the precedence relation between a and b can be determined by a numerical comparison between f(a) and g(b)

Computing Precedence Functions
  1. Create symbols fa and gb for each a that is a terminal or $
  2. Partition the created symbols into as many groups as possible, in such a way that if a $\overset{.}{\mathop{=}}\,$  b, then fa and gb are in the same group. Note that we may have to put symbols in the same group even if they are not related by $\overset{.}{\mathop{=}}\,$ . For example, if a $\overset{.}{\mathop{=}}\,$  b and c $\overset{.}{\mathop{=}}\,$ b, then fa and fc must be in the same group, since they are both in the same group as gb. If in addition c $\overset{.}{\mathop{=}}\,$  d may not hold
  3. Create a directed graph whose nodes are the groups found in (2). For any a and b, if a <.b, place an edge from the group of gb to the group of fa. If a .> b, place an edge from the group of fa to that gb. Note that an edge or path from fa to gb means that f(a) must exceed g(b); a path from gb to fa means that g(b) must exceed f(a)
  4. If the graph constructed in (3) has a cycle, then no precedence function exists. If there are no cycles, let f(a) be the length of the longest path beginning at the group of fa; let g(a) be the length of the longest path from the group of ga
Consider the grammar,
E E + E | E * E | id and its precedence relations table

id
+
*
$
id

.>
.>
.>
+
<.
.>
<.
.>
*
<.
.>
.>
.>
$
<.
<.
<.


Now the precedence and functions are






+
*
id
$
f
2
4
4
0
g
1
3
5
0

To Top