< < "S", 0, 7 >, [ < < "A", 0, 2 >, [ < < "T", 0, 1 >, [ ] >, < < "U", 1, 2 >, [ ] > ] >, < < "B", 2, 2 >, [ ] >, < < "C", 2, 3 >, [ < < "V", 2, 3 >, [ ] > ] >, < < "D", 3, 5 >, [ < < "W", 3, 4 >, [ ] >, < < "X", 4, 5 >, [ ] > ] >, < < "E", 5, 7 >, [ < < "Y", 5, 6 >, [ ] >, < < "Z", 6, 7 >, [ ] > ] > ] >
In the tree above, we use symbol names (for example, "S"
)
as symbol IDs.
Since we have not used the same symbol twice, we will be able to
refer to a node by its symbol name.
In practical parse trees, symbols usually occur many times.
Node S
has 5 children.
Node A
has 2 children.
Node B
has no children and is a nulled node.
Nodes T
, U
, V
, W
, X
,
Y
, and Z
are terminal nodes.
Nodes
S
,
A
,
C
,
D
, and
E
are BNF rule nodes.
The tree implies a grammar with at least
the following rules:
S ::= A B C D E A ::= T U B ::= C ::= V D ::= W X E ::= Y Z
The tree derives the sentence
T U V W X Y X
and can do so in several ways. One is these is its rightmost derviation:
S -> A B C D E -> A B C D Y Z -> A B C W X Y Z -> A B V W X Y Z -> A V W X Y Z -> T U V W X Y Z
This is called the rightmost derviation because, at each derivation step, the symbol that is expanded is the rightmost symbol possible. There is also a leftmost derivation:
S -> A B C D E -> T U B C D E -> T U C D E -> T U V D E -> T U V W X E -> T U V W X Y Z