LL(1) 语法分析及抽象语法树的构建2018-03-16PL左递归的消除 对于文法 A→Aα1∣Aα2∣...∣β1∣β2∣...A \rightarrow A\alpha_1 | A\alpha_2|...|\beta_1|\beta_2|...A→Aα1∣Aα2∣...∣β1∣β2∣... 其最左推导会产生左递归(A→Aα1→AAα1...A\rightarrow A\alpha_1 \rightarrow AA\alpha_1...A→Aα1→AAα1...),导致推导无法终止。 为消除左递归,注意到 AAA 的每个最终推导的起始(非)终结符号必然是 β1,β2...\beta_1,\beta_2...β1,β2... 中的一个;因而这里引入中间产生式 RA→α1RA∣α2RA∣...∣ϵR_A \rightarrow \alpha_1R_A|\alpha_2R_A|...|\epsilonRA→α1RA∣α2RA∣...∣ϵ 同时将产生式 AAA 改写为 A→β1RA∣β2RA∣...A \rightarrow \beta_1R_A|\beta_2R_A|...A→β1RA∣β2RA∣... 这样便消除了左递归。 (间接左递归略去) Todo