summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbringert <bringert@cs.chalmers.se>2007-06-28 01:25:36 +0000
committerbringert <bringert@cs.chalmers.se>2007-06-28 01:25:36 +0000
commitcbf851b516541634be831307888dd61d8dc51c9b (patch)
tree839b03b2359936ccb52dca88fbf56e3793a7a383 /src
parentaf45f33d51298f5b9ce60b4b8786c326eb4601b1 (diff)
-printer=regexp handles precedence
Diffstat (limited to 'src')
-rw-r--r--src/GF/Speech/PrRegExp.hs2
-rw-r--r--src/GF/Speech/RegExp.hs14
2 files changed, 10 insertions, 6 deletions
diff --git a/src/GF/Speech/PrRegExp.hs b/src/GF/Speech/PrRegExp.hs
index 0ad1c0f1e..55a25d69b 100644
--- a/src/GF/Speech/PrRegExp.hs
+++ b/src/GF/Speech/PrRegExp.hs
@@ -20,7 +20,7 @@ import GF.Compile.ShellState (StateGrammar)
regexpPrinter :: Options -> StateGrammar -> String
-regexpPrinter opts s = prRE $ dfa2re $ cfgToFA opts s
+regexpPrinter opts s = (++"\n") $ prRE $ dfa2re $ cfgToFA opts s
multiRegexpPrinter :: Options -> StateGrammar -> String
multiRegexpPrinter opts s = prREs $ mfa2res $ cfgToMFA opts s
diff --git a/src/GF/Speech/RegExp.hs b/src/GF/Speech/RegExp.hs
index 1842780ee..5ee40828e 100644
--- a/src/GF/Speech/RegExp.hs
+++ b/src/GF/Speech/RegExp.hs
@@ -131,9 +131,13 @@ symbolsRE (RESymbol x) = [x]
-- Debugging
prRE :: RE String -> String
-prRE (REUnion []) = "<NULL>"
-prRE (REUnion xs) = "(" ++ concat (intersperse " | " (map prRE xs)) ++ ")"
-prRE (REConcat xs) = "(" ++ unwords (map prRE xs) ++ ")"
-prRE (RERepeat x) = "(" ++ prRE x ++ ")*"
-prRE (RESymbol s) = s
+prRE = prRE' 0
+prRE' _ (REUnion []) = "<NULL>"
+prRE' n (REUnion xs) = p n 1 (concat (intersperse " | " (map (prRE' 1) xs)))
+prRE' n (REConcat xs) = p n 2 (unwords (map (prRE' 2) xs))
+prRE' n (RERepeat x) = p n 3 (prRE' 3 x) ++ "*"
+prRE' _ (RESymbol s) = s
+
+p n m s | n >= m = "(" ++ s ++ ")"
+ | True = s