bottom-up and top-down filtering do not need fix point iteration.

This commit is contained in:
bringert
2007-06-27 17:46:34 +00:00
parent af36dcf13d
commit af45f33d51
3 changed files with 5 additions and 6 deletions

View File

@@ -64,7 +64,7 @@ cfgToFA opts s = minimize $ compileAutomaton start $ makeSimpleRegular opts s
makeSimpleRegular :: Options -> StateGrammar -> CFRules
makeSimpleRegular opts s = makeRegular $ preprocess $ cfgToCFRules s
where start = getStartCatCF opts s
preprocess = fix (topDownFilter start . bottomUpFilter)
preprocess = topDownFilter start . bottomUpFilter
. removeCycles

View File

@@ -93,10 +93,10 @@ makeSimpleSRG opt s = makeSRG preprocess opt s
. mergeIdentical
. traceStats "After removeLeftRecursion"
. removeLeftRecursion origStart
. fix (traceStats "After topDownFilter"
. topDownFilter origStart
. traceStats "After bottomUpFilter"
. bottomUpFilter)
. traceStats "After topDownFilter"
. topDownFilter origStart
. traceStats "After bottomUpFilter"
. bottomUpFilter
. traceStats "After removeCycles"
. removeCycles
. traceStats "Inital CFG"

View File

@@ -109,7 +109,6 @@ bottomUpFilter gr = fix grow Map.empty
okSym g = symbol (`elem` allCats g) (const True)
-- | Removes categories which are not reachable from the start category.
-- Only does one pass through the grammar.
topDownFilter :: Cat_ -> CFRules -> CFRules
topDownFilter start rules = filterCFRulesCats (isRelatedTo uses start) rules
where