TRACE OF RECURSIVE-DESCENT PARSER FOR PL/0 ATTRIBUTE GRAMMAR ------------------------------------------------------------ vax X, Y; begin X := 0; Y := X + 1 end. PROGRAM (out TREE) GET_TOKEN (TOKEN = var) BLOCK (out ENV, TREE) GET_TOKEN (TOKEN = X) GET_TOKEN (TOKEN = ,) GET_TOKEN (TOKEN = Y) GET_TOKEN (TOKEN = ;) GET_TOKEN (TOKEN = begin) STATEMENT (in ENV = <(X, var), (Y, var)>; out TREE) GET_TOKEN (TOKEN = X) STATEMENT (in ENV = <(X, var), (Y, var)>; out TREE) GET_TOKEN (TOKEN = :=) GET_TOKEN (TOKEN = 0) EXPRESSION (in ENV = <(X, var), (Y, var)>; out TREE) TERM (in ENV = <(X, var), (Y, var)>; out TREE) FACTOR (in ENV = <(X, var), (Y, var)>; out TREE) GET_TOKEN (TOKEN = ;) return TREE = (0) return TREE = (0) return TREE = (0) return TREE = (:= X 0) GET_TOKEN (TOKEN = Y) STATEMENT (in ENV = <(X, var), (Y, var)>; out TREE) GET_TOKEN (TOKEN = :=) GET_TOKEN (TOKEN = X) EXPRESSION (in ENV = <(X, var), (Y, var)>; out TREE) TERM (in ENV = <(X, var), (Y, var)>; out TREE) FACTOR (in ENV = <(X, var), (Y, var)>; out TREE) GET_TOKEN (TOKEN = +) return TREE = (X) return TREE = (X) GET_TOKEN (TOKEN = 1) TERM (in ENV = <(X, var), (Y, var)>; out TREE) FACTOR (in ENV = <(X, var), (Y, var)>; out TREE) GET_TOKEN (TOKEN = end) return TREE = (1) return TREE = (1) return TREE = (+ X 1) return TREE = (:= (+ X 1)) GET_TOKEN (TOKEN = .) return TREE = (; (:= X 0) (:= (+ X 1))) return ENV = <(X, var), (Y, var)>, TREE = (; (:= X 0) (:= (+ X 1))) return TREE = (; (:= X 0) (:= (+ X 1))) Note: Indentation level identifies function components.