Skip to content

Commit

Permalink
Implement parser for Piet
Browse files Browse the repository at this point in the history
  • Loading branch information
kamil-adam committed Jul 25, 2023
1 parent 172a6bd commit 2431acd
Show file tree
Hide file tree
Showing 263 changed files with 13,311 additions and 535 deletions.
6,101 changes: 6,101 additions & 0 deletions .output/actual/piet/parsed/pietcc/hw.png.parsed

Large diffs are not rendered by default.

6,101 changes: 6,101 additions & 0 deletions .output/golden/piet/parsed/pietcc/hw.png.parsed

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ source-repository-package
type: git
location: https://github.com/helvm/helio.git
branch: master
tag: 0.1.1.8
tag: 0.1.2.3
3 changes: 3 additions & 0 deletions docs/developers/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# 📅 Revision history for HelMA

## 0.8.4.13 -- 2023-07-25
* Implement parser for Piet

## 0.8.4.12 -- 2023-07-24
* Add examples for Piet

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
span.nottickedoff { background: yellow}
span.istickedoff { background: white }
span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
span.tickonlytrue { margin: -1px; border: 1px solid #60de51; background: #60de51 }
span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
span.decl { font-weight: bold }
span.spaces { background: white }
</style>
</head>
<body>
<pre>
<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
</pre>
<pre>
<span class="lineno"> 1 </span>module HelVM.HelMA.Automata.Piet.Color where
<span class="lineno"> 2 </span>
<span class="lineno"> 3 </span>import HelVM.HelIO.SwitchEnum
<span class="lineno"> 4 </span>
<span class="lineno"> 5 </span>mixedColor :: MixedColor -&gt; MixedColor -&gt; MixedColor
<span class="lineno"> 6 </span><span class="decl"><span class="nottickedoff">mixedColor (MixedColor b1 h1) (MixedColor b2 h2) = MixedColor (brightnessChange b1 b2) (hueChange h1 h2)</span></span>
<span class="lineno"> 7 </span>
<span class="lineno"> 8 </span>brightnessChange :: Brightness -&gt; Brightness -&gt; Brightness
<span class="lineno"> 9 </span><span class="decl"><span class="nottickedoff">brightnessChange = change 3</span></span>
<span class="lineno"> 10 </span>
<span class="lineno"> 11 </span>hueChange :: Hue -&gt; Hue -&gt; Hue
<span class="lineno"> 12 </span><span class="decl"><span class="nottickedoff">hueChange = change 6</span></span>
<span class="lineno"> 13 </span>
<span class="lineno"> 14 </span>change :: (Bounded e, Enum e) =&gt; Int -&gt; e -&gt; e -&gt; e
<span class="lineno"> 15 </span><span class="decl"><span class="nottickedoff">change i e1 e2 = unsafeEnum $ (fromEnum e2 - fromEnum e1) `mod` i</span></span>
<span class="lineno"> 16 </span>
<span class="lineno"> 17 </span>-- | Constructors
<span class="lineno"> 18 </span>rgb2Color :: (Num a , Eq a) =&gt; RGBColor a -&gt; Color
<span class="lineno"> 19 </span><span class="decl"><span class="istickedoff">rgb2Color (RGBColor 0xff 0xc0 0xc0) = OtherColor $ MixedColor Light Red</span>
<span class="lineno"> 20 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xff 0x00 0x00) = OtherColor $ MixedColor Normal Red</span>
<span class="lineno"> 21 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xc0 0x00 0x00) = OtherColor $ MixedColor Dark Red</span>
<span class="lineno"> 22 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xff 0xff 0xc0) = OtherColor $ MixedColor Light Yellow</span>
<span class="lineno"> 23 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xff 0xff 0x00) = OtherColor $ MixedColor Normal Yellow</span>
<span class="lineno"> 24 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xc0 0xc0 0x00) = OtherColor $ MixedColor Dark Yellow</span>
<span class="lineno"> 25 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xc0 0xff 0xc0) = <span class="nottickedoff">OtherColor $ MixedColor Light Green</span></span>
<span class="lineno"> 26 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0x00 0xff 0x00) = OtherColor $ MixedColor Normal Green</span>
<span class="lineno"> 27 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0x00 0xc0 0x00) = OtherColor $ MixedColor Dark Green</span>
<span class="lineno"> 28 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xc0 0xff 0xff) = <span class="nottickedoff">OtherColor $ MixedColor Light Cyan</span></span>
<span class="lineno"> 29 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0x00 0xff 0xff) = OtherColor $ MixedColor Normal Cyan</span>
<span class="lineno"> 30 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0x00 0xc0 0xc0) = OtherColor $ MixedColor Dark Cyan</span>
<span class="lineno"> 31 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xc0 0xc0 0xff) = OtherColor $ MixedColor Light Blue</span>
<span class="lineno"> 32 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0x00 0x00 0xff) = OtherColor $ MixedColor Normal Blue</span>
<span class="lineno"> 33 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0x00 0x00 0xc0) = OtherColor $ MixedColor Dark Blue</span>
<span class="lineno"> 34 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xff 0xc0 0xff) = OtherColor $ MixedColor Light Magenta</span>
<span class="lineno"> 35 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xff 0x00 0xff) = OtherColor $ MixedColor Normal Magenta</span>
<span class="lineno"> 36 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xc0 0x00 0xc0) = OtherColor $ MixedColor Dark Magenta</span>
<span class="lineno"> 37 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0x00 0x00 0x00) = Black</span>
<span class="lineno"> 38 </span><span class="spaces"></span><span class="istickedoff">rgb2Color (RGBColor 0xff 0xff 0xff) = <span class="nottickedoff">White</span></span>
<span class="lineno"> 39 </span><span class="spaces"></span><span class="istickedoff">rgb2Color _ = <span class="nottickedoff">White</span></span></span>
<span class="lineno"> 40 </span>
<span class="lineno"> 41 </span>-- | Types
<span class="lineno"> 42 </span>data RGBColor a = RGBColor a a a
<span class="lineno"> 43 </span>
<span class="lineno"> 44 </span>data Color = Black | White | OtherColor !MixedColor
<span class="lineno"> 45 </span> deriving stock (<span class="decl"><span class="istickedoff">Show</span></span> , <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Read</span></span></span></span></span></span> , <span class="decl"><span class="nottickedoff">Eq</span></span> , <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Ord</span></span></span></span></span></span></span></span></span></span>)
<span class="lineno"> 46 </span>
<span class="lineno"> 47 </span>data MixedColor = MixedColor !Brightness !Hue
<span class="lineno"> 48 </span> deriving stock (<span class="decl"><span class="istickedoff">Show</span></span> , <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Read</span></span></span></span></span></span> , <span class="decl"><span class="nottickedoff">Eq</span></span> , <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Ord</span></span></span></span></span></span></span></span></span></span>)
<span class="lineno"> 49 </span>
<span class="lineno"> 50 </span>data Brightness = Light | Normal | Dark
<span class="lineno"> 51 </span> deriving stock (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Bounded</span></span></span></span> , <span class="decl"><span class="istickedoff">Show</span></span> , <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Read</span></span></span></span></span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span> , <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Ord</span></span></span></span></span></span></span></span></span></span> , <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Enum</span></span></span></span></span></span></span></span></span></span></span></span>)
<span class="lineno"> 52 </span>
<span class="lineno"> 53 </span>data Hue = Red | Yellow | Green | Cyan | Blue | Magenta
<span class="lineno"> 54 </span> deriving stock (<span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Bounded</span></span></span></span> , <span class="decl"><span class="istickedoff">Show</span></span> , <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Read</span></span></span></span></span></span>, <span class="decl"><span class="nottickedoff">Eq</span></span> , <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Ord</span></span></span></span></span></span></span></span></span></span> , <span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff"><span class="decl"><span class="nottickedoff">Enum</span></span></span></span></span></span></span></span></span></span></span></span>)

</pre>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
span.nottickedoff { background: yellow}
span.istickedoff { background: white }
span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
span.tickonlytrue { margin: -1px; border: 1px solid #60de51; background: #60de51 }
span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
span.decl { font-weight: bold }
span.spaces { background: white }
</style>
</head>
<body>
<pre>
<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
</pre>
<pre>
<span class="lineno"> 1 </span>module HelVM.HelMA.Automata.Piet.Image where
<span class="lineno"> 2 </span>
<span class="lineno"> 3 </span>import Data.Array.IArray
<span class="lineno"> 4 </span>import HelVM.HelMA.Automata.Piet.Coordinates
<span class="lineno"> 5 </span>
<span class="lineno"> 6 </span>-- | Constructors
<span class="lineno"> 7 </span>
<span class="lineno"> 8 </span>newEmptyImage :: Coordinates -&gt; Image a
<span class="lineno"> 9 </span><span class="decl"><span class="nottickedoff">newEmptyImage = newImage []</span></span>
<span class="lineno"> 10 </span>
<span class="lineno"> 11 </span>newImage :: [(Coordinates, a)] -&gt; Coordinates -&gt; Image a
<span class="lineno"> 12 </span><span class="decl"><span class="istickedoff">newImage entries c = array ((0 , 0) , c) entries</span></span>
<span class="lineno"> 13 </span>
<span class="lineno"> 14 </span>imgSetPixel :: Coordinates -&gt; a -&gt; Image a -&gt; Image a
<span class="lineno"> 15 </span><span class="decl"><span class="nottickedoff">imgSetPixel c pixel img = img // [(c, pixel)]</span></span>
<span class="lineno"> 16 </span>
<span class="lineno"> 17 </span>-- | Getters
<span class="lineno"> 18 </span>unsafeLoopUp :: Coordinates -&gt; Image a -&gt; a
<span class="lineno"> 19 </span><span class="decl"><span class="nottickedoff">unsafeLoopUp = flip (!)</span></span>
<span class="lineno"> 20 </span>
<span class="lineno"> 21 </span>border :: Image a -&gt; Coordinates
<span class="lineno"> 22 </span><span class="decl"><span class="nottickedoff">border = snd . bounds</span></span>
<span class="lineno"> 23 </span>
<span class="lineno"> 24 </span>-- | Type
<span class="lineno"> 25 </span>type Image a = Array Coordinates a

</pre>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
span.nottickedoff { background: yellow}
span.istickedoff { background: white }
span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
span.tickonlytrue { margin: -1px; border: 1px solid #60de51; background: #60de51 }
span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
span.decl { font-weight: bold }
span.spaces { background: white }
</style>
</head>
<body>
<pre>
<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
</pre>
<pre>
<span class="lineno"> 1 </span>module HelVM.HelMA.Automata.Piet.ListExtra where
<span class="lineno"> 2 </span>
<span class="lineno"> 3 </span>lastUntil :: (a -&gt; Bool) -&gt; [a] -&gt; a
<span class="lineno"> 4 </span><span class="decl"><span class="istickedoff">lastUntil _ [] = <span class="nottickedoff">error &quot;empty list in lastUntil helper (ListExtra)&quot;</span></span>
<span class="lineno"> 5 </span><span class="spaces"></span><span class="istickedoff">lastUntil _ [x] = <span class="nottickedoff">x</span></span>
<span class="lineno"> 6 </span><span class="spaces"></span><span class="istickedoff">lastUntil p (x:xs) = if <span class="tickonlytrue">p x</span> then x else <span class="nottickedoff">lastUntil p xs</span></span></span>

</pre>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
span.nottickedoff { background: yellow}
span.istickedoff { background: white }
span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
span.tickonlytrue { margin: -1px; border: 1px solid #60de51; background: #60de51 }
span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
span.decl { font-weight: bold }
span.spaces { background: white }
</style>
</head>
<body>
<pre>
<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
</pre>
<pre>
<span class="lineno"> 1 </span>module HelVM.HelMA.Automata.Piet.MonadFailExtra where
<span class="lineno"> 2 </span>
<span class="lineno"> 3 </span>eitherToMonadFail :: (Show a, MonadFail m) =&gt; Either a b -&gt; m b
<span class="lineno"> 4 </span><span class="decl"><span class="istickedoff">eitherToMonadFail (Right a) = pure a</span>
<span class="lineno"> 5 </span><span class="spaces"></span><span class="istickedoff">eitherToMonadFail (Left a) = <span class="nottickedoff">fail $ show a</span></span></span>

</pre>
</body>
</html>
Loading

0 comments on commit 2431acd

Please sign in to comment.