| CSC448: Parsing Revisited: Derivations III [104/133] | ![]() ![]() ![]() |
A derivation is leftmost if the chosen non-terminal symbol is always the leftmost non-terminal.
Leftmost derivations are interesting, because they correspond to the parsing strategy used by a JavaCC parser.
As a JavaCC parser sees the terminals symbols
"(" digit "+" digit ")" "*" digit,
it makes "local" decisions about which production to use.
The decisions must be based upon the next terminal symbol.
exp
=> exp "*" exp
=> "(" exp ")" "*" exp
=> "(" exp "+" exp ")" "*" exp
=> "(" num "+" exp ")" "*" exp
=> "(" digit "+" exp ")" "*" exp
=> "(" digit "+" num ")" "*" exp
=> "(" digit "+" digit ")" "*" exp
=> "(" digit "+" digit ")" "*" num
=> "(" digit "+" digit ")" "*" digit
See page 169 and section 4.4 of the Dragon book.