bottom-up parsing
Top-down parsing starts from the big idea and works toward the words; bottom-up parsing does the reverse. Picture assembling a jigsaw not by guessing the final picture, but by snapping together small pieces you can see in front of you into ever-larger chunks, until the whole board is one piece. Bottom-up parsing starts from the actual tokens and repeatedly combines them, applying grammar rules in reverse, until everything has merged back up into the start symbol.
Mechanically, a bottom-up parser scans the input left to right and keeps the symbols seen so far on a stack. At each step it does one of two things: shift, push the next token onto the stack, or reduce, recognize that the top few stack symbols match the right-hand side of some rule A -> alpha and replace them with the left-hand side A. The chunk that gets reduced is called the handle. A bottom-up parser builds the parse tree from the leaves up to the root and, read in reverse, traces out a rightmost derivation. The whole art is deciding, at each step, whether to shift or reduce and, if reduce, by which rule, which is exactly what the LR family of parsers solves with a precomputed table built from the grammar's states.
Bottom-up LR parsing is strictly more powerful than top-down LL parsing: it can handle left recursion directly (so natural arithmetic grammars work as written) and copes with a much broader class of grammars. That is why automatic parser generators like yacc and bison produce bottom-up LR parsers rather than top-down ones. The trade-off is human-friendliness: the LR tables are produced by a tool and are nearly impossible to read or hand-edit, and conflicts in the grammar surface as cryptic shift-reduce or reduce-reduce messages.
For E -> E + E | num and input num + num, a bottom-up parser shifts num, reduces it to E, shifts +, shifts num, reduces it to E, then reduces E + E to E. Reading those reductions backward gives a rightmost derivation; the tree was built leaves-first.
Bottom-up: start at the tokens, shift onto a stack, reduce handles upward to the start symbol.
Bottom-up parsers handle left recursion naturally, the very thing top-down parsers cannot. That extra power is exactly why generated parsers are almost always bottom-up LR, not top-down.