« Home

Definition. 左遞迴 [cs-000A]

左遞迴是我們定義文法的時候會出現的一種形式,比如

ExprExpr+ExprExpr \to Expr + Expr

翻譯成遞歸下降解析器時會有像下面這樣的程式

def expr : Parsec E :=
  let l <- expr
  match '+'
  let r <- expr
  return E.add l r

這時候 expr 顯然是一個非終止的發散函數,而因為遞迴的原因是運算式的左邊,所以被稱為左遞迴。這樣的 infix 運算形式在文法中很常見,所以我們需要方法來消除文法中的左遞迴。