From 99af757b0603b2b8ea904edc011aac53cf6a26b3 Mon Sep 17 00:00:00 2001 From: bringert Date: Sat, 24 Mar 2007 17:30:04 +0000 Subject: [PATCH] Modified the LC_LR implementation to only produce rules using A-X categories when those categories have any productions. --- src/GF/Speech/TransformCFG.hs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/GF/Speech/TransformCFG.hs b/src/GF/Speech/TransformCFG.hs index 232239b20..dcb666bf3 100644 --- a/src/GF/Speech/TransformCFG.hs +++ b/src/GF/Speech/TransformCFG.hs @@ -125,6 +125,7 @@ removeLeftRecursion start gr x <- properLeftCornersOf a, not (isLeftRecursive x), let a_x = mkCat (Cat a) x, + a_x `Set.member` newCats, let n' = symbol (\_ -> CFApp (CFRes 1) (CFRes 0)) (\_ -> CFRes 0) x] scheme2 = [CFRule a_x (beta++[Cat a_b]) n' | @@ -147,6 +148,8 @@ removeLeftRecursion start gr (\_ -> n) x] scheme4 = catSetRules gr $ Set.fromList $ filter (not . isLeftRecursive . Cat) cats + newCats = Set.fromList (map lhsCat (scheme2 ++ scheme3)) + shiftTerm :: CFTerm -> CFTerm shiftTerm (CFObj f ts) = CFObj f (map shiftTerm ts) shiftTerm (CFRes 0) = CFVar 1