uni2work.workflows.visualiser/dsl/app/DSLMain.hs
2023-09-02 02:11:21 +02:00

61 lines
1.7 KiB
Haskell

-- SPDX-FileCopyrightText: 2023 David Mosbach <david.mosbach@campus.lmu.de>
--
-- SPDX-License-Identifier: AGPL-3.0-or-later
module DSLMain (dslMain) where
import DSL (parseSubStageDef)
import Data.ByteString.Lazy.UTF8 as BSLU
import Transpiler (resolve)
import Control.Monad (unless)
import Data.Either (isLeft, fromRight)
program =
"required substage InterneBearbeitung when unfulfilled {\n" ++
"let always_required = not edges_in_history([a, b, c])\n" ++
"let sometimes_required = { payload_filled(foo), not bar }\n" ++
"case {\n" ++
"always_required,\n" ++
"edge_in_history(abbrechen),\n" ++
"not payloads_filled([]),\n" ++
"nodes_in_history([x, y, z])\n" ++
"}\n" ++
"case {\n" ++
"always_required,\n" ++
"not previous_nodes()\n" ++
"}\n" ++
"}\n"
program2 =
"optional substage Vorbereitung {\n" ++
"let always_required = not edge_in_history(some-edge)\n" ++
"let sometimes_required = { payload_filled(foo), not bar }\n" ++
"case {\n" ++
"always_required,\n" ++
"edge_in_history(abbrechen),\n" ++
"not payload_filled(some-payload)\n" ++
"}\n" ++
"case {\n" ++
"always_required,\n" ++
"not previous_node(last-node)\n" ++
"}\n" ++
"}\n"
dslMain :: IO ()
dslMain = do
putStrLn "\n\t ### AST ###\n"
let subStage = parseSubStageDef $ BSLU.fromString program2
print subStage
unless (isLeft subStage) $ do
putStrLn "\n\t### Transpiler ###\n"
let transp = resolve $ fromRight undefined subStage
print transp