summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbringert <bringert@cs.chalmers.se>2007-03-24 17:30:04 +0000
committerbringert <bringert@cs.chalmers.se>2007-03-24 17:30:04 +0000
commit4fdc0b598a36ab6b368e39f354364e20d27e9993 (patch)
tree5f3f75ca9041359e29592b70158f8b4e1a120e0d /src
parent61456fd9ca6189a689ac0911f0e7260ce86e76d0 (diff)
Modified the LC_LR implementation to only produce rules using A-X categories when those categories have any productions.
Diffstat (limited to 'src')
-rw-r--r--src/GF/Speech/TransformCFG.hs3
1 files changed, 3 insertions, 0 deletions
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