diff --git a/dsl/app/DSLMain.hs b/dsl/app/DSLMain.hs index 0c008e1..6af61a0 100644 --- a/dsl/app/DSLMain.hs +++ b/dsl/app/DSLMain.hs @@ -9,6 +9,7 @@ module DSLMain (dslMain) where import Transpiler (resolve) import Control.Monad (unless) import Data.Either (isLeft, fromRight) + import Data.YAML (encode) program = "required substage InterneBearbeitung when unfulfilled {\n" ++ @@ -57,4 +58,7 @@ module DSLMain (dslMain) where putStrLn "\n\t### Transpiler ###\n" let transp = resolve $ fromRight undefined subStage print transp + putStrLn "\n\t ### YAML ###\n" + putStrLn . BSLU.toString $ encode [fromRight undefined transp] + diff --git a/dsl/app/Transpiler.hs b/dsl/app/Transpiler.hs index 8fada4c..f10af33 100644 --- a/dsl/app/Transpiler.hs +++ b/dsl/app/Transpiler.hs @@ -48,20 +48,24 @@ module Transpiler where ] instance ToYAML DNFLiteral where - toYAML (DNFLit anchor (Pred' p)) = mapping [ - "tag" .= ("variable" :: Text), + toYAML (DNFLit anchor pred) = mapping [ + "tag" .= tag, "var" .= mapping [ "tag" .= predToText p, predToText p .= pack p.ref ] ] where + (tag, p) = case pred of + Pred' x -> ("variable" :: Text, x) + Neg' x -> ("negated", x) predToText :: Predicate -> Text predToText (EdgeInHistory _) = "edge-in-history" predToText (NodeInHistory _) = "node-in-history" predToText (PayloadFilled _) = "payload-filled" predToText (PreviousNode _) = "previous-node" predToText x = error $ show x ++ " is not fully resolved" + newtype ResolveError = ResolveError String