syntactic 1.9 → 1.10
raw patch · 15 files changed
+245/−435 lines, 15 filesdep +tree-viewdep +utf8-string
Dependencies added: tree-view, utf8-string
Files
- examples/NanoFeldspar/Core.hs +6/−2
- src/Language/Syntactic/Constructs/Decoration.hs +4/−2
- src/Language/Syntactic/Interpretation/Render.hs +8/−2
- syntactic.cabal +4/−4
- tests/NanoFeldsparTree.hs +21/−21
- tests/gold/matMul.txt +43/−86
- tests/gold/prog1.txt +9/−18
- tests/gold/prog2.txt +7/−14
- tests/gold/prog3.txt +29/−58
- tests/gold/prog4.txt +10/−20
- tests/gold/prog5.txt +21/−42
- tests/gold/prog6.txt +33/−66
- tests/gold/prog7.txt +12/−24
- tests/gold/prog8.txt +19/−38
- tests/gold/scProd.txt +19/−38
examples/NanoFeldspar/Core.hs view
@@ -171,13 +171,17 @@ printExpr :: (Syntactic a, Domain a ~ FeldDomainAll) => a -> IO () printExpr = print . reifySmart (const True) canShareDict --- | Draw the syntax tree using ASCII+-- | Show the syntax tree using Unicode art showAST :: (Syntactic a, Domain a ~ FeldDomainAll) => a -> String showAST = Syntactic.showAST . reifySmart (const True) canShareDict --- | Draw the syntax tree on the terminal using ASCII+-- | Draw the syntax tree on the terminal using Unicode art drawAST :: (Syntactic a, Domain a ~ FeldDomainAll) => a -> IO () drawAST = Syntactic.drawAST . reifySmart (const True) canShareDict++-- | Convert the syntax tree to an HTML file with foldable nodes+writeHtmlAST :: (Syntactic a, Domain a ~ FeldDomain) => a -> IO ()+writeHtmlAST = Syntactic.writeHtmlAST "tree.html" . desugar -- | Evaluation eval :: (Syntactic a, Domain a ~ FeldDomainAll) => a -> Internal a
src/Language/Syntactic/Constructs/Decoration.hs view
@@ -4,8 +4,10 @@ -import Data.Tree+import Data.Tree (Tree (..)) +import Data.Tree.View+ import Language.Syntactic @@ -105,7 +107,7 @@ -- | Show an decorated syntax tree using ASCII art showDecorWith :: StringTree dom => (forall a. info a -> String) -> ASTF (Decor info dom) a -> String-showDecorWith showInfo = drawTree . stringTreeDecor showInfo+showDecorWith showInfo = showTree . stringTreeDecor showInfo -- | Print an decorated syntax tree using ASCII art drawDecorWith :: StringTree dom => (forall a. info a -> String) -> ASTF (Decor info dom) a -> IO ()
src/Language/Syntactic/Interpretation/Render.hs view
@@ -5,12 +5,15 @@ , stringTree , showAST , drawAST+ , writeHtmlAST ) where -import Data.Tree+import Data.Tree (Tree (..)) +import Data.Tree.View+ import Language.Syntactic.Syntax @@ -70,9 +73,12 @@ -- | Show a syntax tree using ASCII art showAST :: StringTree dom => ASTF dom a -> String-showAST = drawTree . stringTree+showAST = showTree . stringTree -- | Print a syntax tree using ASCII art drawAST :: StringTree dom => ASTF dom a -> IO () drawAST = putStrLn . showAST++writeHtmlAST :: StringTree sym => FilePath -> ASTF sym a -> IO ()+writeHtmlAST file = writeHtmlTree file . fmap (\n -> NodeInfo n "") . stringTree
syntactic.cabal view
@@ -1,5 +1,5 @@ Name: syntactic-Version: 1.9+Version: 1.10 Synopsis: Generic abstract syntax, and utilities for embedded languages Description: This library provides: .@@ -107,6 +107,7 @@ mtl >= 2 && < 3, template-haskell, transformers >= 0.2,+ tree-view, tuple >= 0.2 hs-source-dirs: src@@ -197,6 +198,5 @@ bytestring, mtl >= 2 && < 3, tasty,- tasty-golden--+ tasty-golden,+ utf8-string
tests/NanoFeldsparTree.hs view
@@ -1,35 +1,35 @@ import Test.Tasty import Test.Tasty.Golden -import qualified Data.ByteString.Lazy.Char8 as B+import Data.ByteString.Lazy.UTF8 (fromString) import NanoFeldspar.Core (showAST) import NanoFeldspar.Test -mkGold_scProd = B.writeFile "tests/gold/scProd.txt" $ B.pack $ showAST scProd-mkGold_matMul = B.writeFile "tests/gold/matMul.txt" $ B.pack $ showAST matMul-mkGold_prog1 = B.writeFile "tests/gold/prog1.txt" $ B.pack $ showAST prog1-mkGold_prog2 = B.writeFile "tests/gold/prog2.txt" $ B.pack $ showAST prog2-mkGold_prog3 = B.writeFile "tests/gold/prog3.txt" $ B.pack $ showAST prog3-mkGold_prog4 = B.writeFile "tests/gold/prog4.txt" $ B.pack $ showAST prog4-mkGold_prog5 = B.writeFile "tests/gold/prog5.txt" $ B.pack $ showAST prog5-mkGold_prog6 = B.writeFile "tests/gold/prog6.txt" $ B.pack $ showAST prog6-mkGold_prog7 = B.writeFile "tests/gold/prog7.txt" $ B.pack $ showAST prog7-mkGold_prog8 = B.writeFile "tests/gold/prog8.txt" $ B.pack $ showAST prog8+mkGold_scProd = writeFile "tests/gold/scProd.txt" $ showAST scProd+mkGold_matMul = writeFile "tests/gold/matMul.txt" $ showAST matMul+mkGold_prog1 = writeFile "tests/gold/prog1.txt" $ showAST prog1+mkGold_prog2 = writeFile "tests/gold/prog2.txt" $ showAST prog2+mkGold_prog3 = writeFile "tests/gold/prog3.txt" $ showAST prog3+mkGold_prog4 = writeFile "tests/gold/prog4.txt" $ showAST prog4+mkGold_prog5 = writeFile "tests/gold/prog5.txt" $ showAST prog5+mkGold_prog6 = writeFile "tests/gold/prog6.txt" $ showAST prog6+mkGold_prog7 = writeFile "tests/gold/prog7.txt" $ showAST prog7+mkGold_prog8 = writeFile "tests/gold/prog8.txt" $ showAST prog8 tests = testGroup "TreeTests"- [ goldenVsString "scProd" "tests/gold/scProd.txt" $ return $ B.pack $ showAST scProd- , goldenVsString "matMul" "tests/gold/matMul.txt" $ return $ B.pack $ showAST matMul- , goldenVsString "prog1" "tests/gold/prog1.txt" $ return $ B.pack $ showAST prog1- , goldenVsString "prog2" "tests/gold/prog2.txt" $ return $ B.pack $ showAST prog2- , goldenVsString "prog3" "tests/gold/prog3.txt" $ return $ B.pack $ showAST prog3- , goldenVsString "prog4" "tests/gold/prog4.txt" $ return $ B.pack $ showAST prog4- , goldenVsString "prog5" "tests/gold/prog5.txt" $ return $ B.pack $ showAST prog5- , goldenVsString "prog6" "tests/gold/prog6.txt" $ return $ B.pack $ showAST prog6- , goldenVsString "prog7" "tests/gold/prog7.txt" $ return $ B.pack $ showAST prog7- , goldenVsString "prog8" "tests/gold/prog8.txt" $ return $ B.pack $ showAST prog8+ [ goldenVsString "scProd" "tests/gold/scProd.txt" $ return $ fromString $ showAST scProd+ , goldenVsString "matMul" "tests/gold/matMul.txt" $ return $ fromString $ showAST matMul+ , goldenVsString "prog1" "tests/gold/prog1.txt" $ return $ fromString $ showAST prog1+ , goldenVsString "prog2" "tests/gold/prog2.txt" $ return $ fromString $ showAST prog2+ , goldenVsString "prog3" "tests/gold/prog3.txt" $ return $ fromString $ showAST prog3+ , goldenVsString "prog4" "tests/gold/prog4.txt" $ return $ fromString $ showAST prog4+ , goldenVsString "prog5" "tests/gold/prog5.txt" $ return $ fromString $ showAST prog5+ , goldenVsString "prog6" "tests/gold/prog6.txt" $ return $ fromString $ showAST prog6+ , goldenVsString "prog7" "tests/gold/prog7.txt" $ return $ fromString $ showAST prog7+ , goldenVsString "prog8" "tests/gold/prog8.txt" $ return $ fromString $ showAST prog8 ] main = defaultMain tests
tests/gold/matMul.txt view
@@ -1,87 +1,44 @@ Lambda 0-|-`- Lambda 1- |- `- Let 6- |- +- arrLength- | |- | `- getIx- | |- | +- var:1- | |- | `- 0- |- `- Let 7- |- +- arrLength- | |- | `- var:1- |- `- parallel- |- +- arrLength- | |- | `- var:0- |- `- Lambda 2- |- `- Let 8- |- +- min- | |- | +- arrLength- | | |- | | `- getIx- | | |- | | +- var:0- | | |- | | `- var:2- | |- | `- var:7- |- `- Let 9- |- +- getIx- | |- | +- var:0- | |- | `- var:2- |- `- parallel- |- +- var:6- |- `- Lambda 3- |- `- forLoop- |- +- var:8- |- +- 0.0- |- `- Lambda 4- |- `- Lambda 5- |- `- (+)- |- +- (*)- | |- | +- getIx- | | |- | | +- var:9- | | |- | | `- var:4- | |- | `- getIx- | |- | +- getIx- | | |- | | +- var:1- | | |- | | `- var:4- | |- | `- var:3- |- `- var:5+ └╴Lambda 1+ └╴Let 6+ ├╴arrLength+ │ └╴getIx+ │ ├╴var:1+ │ └╴0+ └╴Let 7+ ├╴arrLength+ │ └╴var:1+ └╴parallel+ ├╴arrLength+ │ └╴var:0+ └╴Lambda 2+ └╴Let 8+ ├╴min+ │ ├╴arrLength+ │ │ └╴getIx+ │ │ ├╴var:0+ │ │ └╴var:2+ │ └╴var:7+ └╴Let 9+ ├╴getIx+ │ ├╴var:0+ │ └╴var:2+ └╴parallel+ ├╴var:6+ └╴Lambda 3+ └╴forLoop+ ├╴var:8+ ├╴0.0+ └╴Lambda 4+ └╴Lambda 5+ └╴(+)+ ├╴(*)+ │ ├╴getIx+ │ │ ├╴var:9+ │ │ └╴var:4+ │ └╴getIx+ │ ├╴getIx+ │ │ ├╴var:1+ │ │ └╴var:4+ │ └╴var:3+ └╴var:5
tests/gold/prog1.txt view
@@ -1,19 +1,10 @@ Lambda 0-|-`- Lambda 1- |- `- parallel- |- +- var:0- |- `- Lambda 2- |- `- min- |- +- (+)- | |- | +- var:2- | |- | `- 3- |- `- var:1+ └╴Lambda 1+ └╴parallel+ ├╴var:0+ └╴Lambda 2+ └╴min+ ├╴(+)+ │ ├╴var:2+ │ └╴3+ └╴var:1
tests/gold/prog2.txt view
@@ -1,15 +1,8 @@ Lambda 0-|-`- Let 1- |- +- min- | |- | +- var:0- | |- | `- var:0- |- `- max- |- +- var:1- |- `- var:1+ └╴Let 1+ ├╴min+ │ ├╴var:0+ │ └╴var:0+ └╴max+ ├╴var:1+ └╴var:1
tests/gold/prog3.txt view
@@ -1,59 +1,30 @@ Lambda 0-|-`- Lambda 1- |- `- Let 4- |- +- (+)- | |- | +- (-)- | | |- | | +- max- | | | |- | | | +- var:0- | | | |- | | | `- var:1- | | |- | | `- min- | | |- | | +- var:0- | | |- | | `- var:1- | |- | `- 1- |- `- Let 5- |- +- min- | |- | +- var:0- | |- | `- var:1- |- `- forLoop- |- +- var:4- |- +- 0- |- `- Lambda 2- |- `- Lambda 3- |- `- (+)- |- +- (+)- | |- | +- (-)- | | |- | | +- (-)- | | | |- | | | +- var:4- | | | |- | | | `- var:2- | | |- | | `- 1- | |- | `- var:5- |- `- var:3+ └╴Lambda 1+ └╴Let 4+ ├╴(+)+ │ ├╴(-)+ │ │ ├╴max+ │ │ │ ├╴var:0+ │ │ │ └╴var:1+ │ │ └╴min+ │ │ ├╴var:0+ │ │ └╴var:1+ │ └╴1+ └╴Let 5+ ├╴min+ │ ├╴var:0+ │ └╴var:1+ └╴forLoop+ ├╴var:4+ ├╴0+ └╴Lambda 2+ └╴Lambda 3+ └╴(+)+ ├╴(+)+ │ ├╴(-)+ │ │ ├╴(-)+ │ │ │ ├╴var:4+ │ │ │ └╴var:2+ │ │ └╴1+ │ └╴var:5+ └╴var:3
tests/gold/prog4.txt view
@@ -1,21 +1,11 @@ Lambda 0-|-`- Let 2- |- +- (+)- | |- | +- var:0- | |- | `- var:0- |- `- parallel- |- +- var:0- |- `- Lambda 1- |- `- (*)- |- +- var:2- |- `- var:1+ └╴Let 2+ ├╴(+)+ │ ├╴var:0+ │ └╴var:0+ └╴parallel+ ├╴var:0+ └╴Lambda 1+ └╴(*)+ ├╴var:2+ └╴var:1
tests/gold/prog5.txt view
@@ -1,43 +1,22 @@ Lambda 0-|-`- Let 1- |- +- tup2- | |- | +- (*)- | | |- | | +- var:0- | | |- | | `- 2- | |- | `- (*)- | |- | +- var:0- | |- | `- 3- |- `- Let 2- |- +- sel1- | |- | `- var:1- |- `- Let 3- |- +- sel2- | |- | `- var:1- |- `- (*)- |- +- (-)- | |- | +- var:2- | |- | `- var:3- |- `- (-)- |- +- var:3- |- `- var:2+ └╴Let 1+ ├╴tup2+ │ ├╴(*)+ │ │ ├╴var:0+ │ │ └╴2+ │ └╴(*)+ │ ├╴var:0+ │ └╴3+ └╴Let 2+ ├╴sel1+ │ └╴var:1+ └╴Let 3+ ├╴sel2+ │ └╴var:1+ └╴(*)+ ├╴(-)+ │ ├╴var:2+ │ └╴var:3+ └╴(-)+ ├╴var:3+ └╴var:2
tests/gold/prog6.txt view
@@ -1,67 +1,34 @@ Let 9-|-+- parallel-| |-| +- (+)-| | |-| | +- (-)-| | | |-| | | +- 20-| | | |-| | | `- 1-| | |-| | `- 1-| |-| `- Lambda 0-| |-| `- (+)-| |-| +- var:0-| |-| `- 1-|-`- Let 10- |- +- forLoop- | |- | +- arrLength- | | |- | | `- var:9- | |- | +- 0- | |- | `- Lambda 2- | |- | `- Lambda 3- | |- | `- (+)- | |- | +- (*)- | | |- | | +- getIx- | | | |- | | | +- var:9- | | | |- | | | `- var:2- | | |- | | `- 2- | |- | `- var:3- |- `- (+)- |- +- (+)- | |- | +- (*)- | | |- | | +- getIx- | | | |- | | | +- var:9- | | | |- | | | `- 1- | | |- | | `- 2- | |- | `- var:10- |- `- var:10+ ├╴parallel+ │ ├╴(+)+ │ │ ├╴(-)+ │ │ │ ├╴20+ │ │ │ └╴1+ │ │ └╴1+ │ └╴Lambda 0+ │ └╴(+)+ │ ├╴var:0+ │ └╴1+ └╴Let 10+ ├╴forLoop+ │ ├╴arrLength+ │ │ └╴var:9+ │ ├╴0+ │ └╴Lambda 2+ │ └╴Lambda 3+ │ └╴(+)+ │ ├╴(*)+ │ │ ├╴getIx+ │ │ │ ├╴var:9+ │ │ │ └╴var:2+ │ │ └╴2+ │ └╴var:3+ └╴(+)+ ├╴(+)+ │ ├╴(*)+ │ │ ├╴getIx+ │ │ │ ├╴var:9+ │ │ │ └╴1+ │ │ └╴2+ │ └╴var:10+ └╴var:10
tests/gold/prog7.txt view
@@ -1,25 +1,13 @@ Lambda 0-|-`- Let 1- |- +- max- | |- | +- 5- | |- | `- (+)- | |- | +- 6- | |- | `- 7- |- `- condition- |- +- (==)- | |- | +- var:0- | |- | `- 10- |- +- var:1- |- `- var:1+ └╴Let 1+ ├╴max+ │ ├╴5+ │ └╴(+)+ │ ├╴6+ │ └╴7+ └╴condition+ ├╴(==)+ │ ├╴var:0+ │ └╴10+ ├╴var:1+ └╴var:1
tests/gold/prog8.txt view
@@ -1,39 +1,20 @@ Lambda 0-|-`- Let 3- |- +- parallel- | |- | +- 10- | |- | `- Lambda 1- | |- | `- (+)- | |- | +- var:1- | |- | `- var:0- |- `- condition- |- +- (==)- | |- | +- (*)- | | |- | | +- (*)- | | | |- | | | +- (*)- | | | | |- | | | | +- var:0- | | | | |- | | | | `- var:0- | | | |- | | | `- var:0- | | |- | | `- var:0- | |- | `- 23- |- +- var:3- |- `- var:3+ └╴Let 3+ ├╴parallel+ │ ├╴10+ │ └╴Lambda 1+ │ └╴(+)+ │ ├╴var:1+ │ └╴var:0+ └╴condition+ ├╴(==)+ │ ├╴(*)+ │ │ ├╴(*)+ │ │ │ ├╴(*)+ │ │ │ │ ├╴var:0+ │ │ │ │ └╴var:0+ │ │ │ └╴var:0+ │ │ └╴var:0+ │ └╴23+ ├╴var:3+ └╴var:3
tests/gold/scProd.txt view
@@ -1,39 +1,20 @@ Lambda 0-|-`- Lambda 1- |- `- forLoop- |- +- min- | |- | +- arrLength- | | |- | | `- var:0- | |- | `- arrLength- | |- | `- var:1- |- +- 0.0- |- `- Lambda 2- |- `- Lambda 3- |- `- (+)- |- +- (*)- | |- | +- getIx- | | |- | | +- var:0- | | |- | | `- var:2- | |- | `- getIx- | |- | +- var:1- | |- | `- var:2- |- `- var:3+ └╴Lambda 1+ └╴forLoop+ ├╴min+ │ ├╴arrLength+ │ │ └╴var:0+ │ └╴arrLength+ │ └╴var:1+ ├╴0.0+ └╴Lambda 2+ └╴Lambda 3+ └╴(+)+ ├╴(*)+ │ ├╴getIx+ │ │ ├╴var:0+ │ │ └╴var:2+ │ └╴getIx+ │ ├╴var:1+ │ └╴var:2+ └╴var:3