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 []) = "" -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 []) = "" +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