3.2语言和文法 ·无二义的文法 stmt -matched stmt unmatched stmt matched stmt -if expr then matched stmt else matched stmt other unmatched stmt -if expr then stmt if expr then matched stmt else unmatched stmt
3 2. 语言和文法 • 无二义的文法 stmt matched _ stmt | unmatched_stmt matched _ stmt if expr then matched_stmt else matched _ stmt | other unmatch de _ stmt if expr then stmt | if expr then matched_stmt else unmatched _ stmt
3.2语言和文法 3.2.6消除左递归 ·文法左递归 A→+AC 。直接左递归 A-→AaB -串的特点 Ba...a ·消除直接左递归 A→BA A'→CA'e
3 2. 语言和文法 3.2.6 消除左递归 • 文法左递归 A+A • 直接左递归 AA – 串的特点 • 消除直接左递归 A A A A |
3.2语言和文法 ·例算术表达文法 E→E+TT (T+T...+T T>T*F五 (F*F。,,*F) F→(E)lid 消除左递归后文法 E→TE' E'→+TE'8 T→FT T’→*FT'E F→(E)lid
3 2. 语言和文法 • 例 算术表达文法 E E + T | T ( T + T ... + T ) T T F | F ( F F ... F ) F ( E ) | id 消除左递归后文法 E TE E + TE | T FT T F T | F ( E ) | id
3.2语言和文法 ·非直接左递归 S→Aab A→Sdε ·先变换成直接左递归 S→Aalb A→Aad bd s ·再消除左递归 S→Aa|b A→bdA'|A A'→alA'ε
3 2. 语言和文法 • 非直接左递归 S Aa | b A Sd | • 先变换成直接左递归 S Aa | b A Aad | bd | • 再消除左递归 S Aa | b A bd A | A A adA |
3.2语言和文法 3.2.7提左因子 ·有左因子的文法 A-→Cp|p ·提左因子 A→CA' A→BIE3
3 2. 语言和文法 3.2.7 提左因子 • 有左因子的文法 A 1 | 2 • 提左因子 A A A 1 | 2 1 |