mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-10 03:32:51 -06:00
-printer=regexp handles precedence
This commit is contained in:
@@ -20,7 +20,7 @@ import GF.Compile.ShellState (StateGrammar)
|
|||||||
|
|
||||||
|
|
||||||
regexpPrinter :: Options -> StateGrammar -> String
|
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 :: Options -> StateGrammar -> String
|
||||||
multiRegexpPrinter opts s = prREs $ mfa2res $ cfgToMFA opts s
|
multiRegexpPrinter opts s = prREs $ mfa2res $ cfgToMFA opts s
|
||||||
|
|||||||
@@ -131,9 +131,13 @@ symbolsRE (RESymbol x) = [x]
|
|||||||
-- Debugging
|
-- Debugging
|
||||||
|
|
||||||
prRE :: RE String -> String
|
prRE :: RE String -> String
|
||||||
prRE (REUnion []) = "<NULL>"
|
prRE = prRE' 0
|
||||||
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' _ (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
|
||||||
|
|||||||
Reference in New Issue
Block a user