function to read bril from text file
This commit is contained in:
parent
031b812c51
commit
5a90054972
|
|
@ -0,0 +1,36 @@
|
||||||
|
"functions": [
|
||||||
|
{
|
||||||
|
"instrs": [
|
||||||
|
{
|
||||||
|
"dest": "v0",
|
||||||
|
"op": "const",
|
||||||
|
"type": "int",
|
||||||
|
"value": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dest": "v1",
|
||||||
|
"op": "const",
|
||||||
|
"type": "int",
|
||||||
|
"value": 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"args": [
|
||||||
|
"v0",
|
||||||
|
"v1"
|
||||||
|
],
|
||||||
|
"dest": "v2",
|
||||||
|
"op": "add",
|
||||||
|
"type": "int"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"args": [
|
||||||
|
"v2"
|
||||||
|
],
|
||||||
|
"op": "print"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"name": "main"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -23,7 +23,8 @@ library eoc-lib
|
||||||
base >=4.13 && <4.18,
|
base >=4.13 && <4.18,
|
||||||
text >= 2.0,
|
text >= 2.0,
|
||||||
aeson >= 2.2,
|
aeson >= 2.2,
|
||||||
sorted-list ^>= 0.2
|
sorted-list ^>= 0.2,
|
||||||
|
bytestring >= 0.11
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
default-extensions: DeriveGeneric, OverloadedStrings
|
default-extensions: DeriveGeneric, OverloadedStrings
|
||||||
|
|
||||||
|
|
|
||||||
10
lib/Bril.hs
10
lib/Bril.hs
|
|
@ -2,9 +2,10 @@ module Bril (
|
||||||
Function (..), Type (..), Value (..), InstrOperation (..), FunctionArg (..), Program (..),
|
Function (..), Type (..), Value (..), InstrOperation (..), FunctionArg (..), Program (..),
|
||||||
Instruction (..),
|
Instruction (..),
|
||||||
parseValue,
|
parseValue,
|
||||||
|
parseBrilFromPath, parseBrilJSON,
|
||||||
)where
|
)where
|
||||||
|
|
||||||
import Data.Aeson (FromJSON, parseJSON, withObject, withText, (.:), (.:?), decode)
|
import Data.Aeson (FromJSON, parseJSON, withObject, withText, (.:), (.:?), eitherDecode)
|
||||||
import Data.Aeson.Types (Parser, modifyFailure)
|
import Data.Aeson.Types (Parser, modifyFailure)
|
||||||
import qualified Data.Aeson (Value, Object, Key)
|
import qualified Data.Aeson (Value, Object, Key)
|
||||||
import Data.Aeson.KeyMap
|
import Data.Aeson.KeyMap
|
||||||
|
|
@ -14,6 +15,7 @@ import Data.Text.Read (Reader, signed, decimal)
|
||||||
import Data.SortedList
|
import Data.SortedList
|
||||||
import Data.Maybe (fromMaybe, isJust)
|
import Data.Maybe (fromMaybe, isJust)
|
||||||
|
|
||||||
|
import qualified Data.ByteString.Lazy as LB
|
||||||
|
|
||||||
data Program = Program { programFns :: [Function] }
|
data Program = Program { programFns :: [Function] }
|
||||||
deriving (Show, Eq)
|
deriving (Show, Eq)
|
||||||
|
|
@ -215,4 +217,8 @@ parseValue Int =
|
||||||
else fail $ "invalid int literal: " ++ (T.unpack v)
|
else fail $ "invalid int literal: " ++ (T.unpack v)
|
||||||
|
|
||||||
|
|
||||||
parseBrilJSON text = (decode text :: Maybe Program)
|
parseBrilJSON text = (eitherDecode text :: Either String Program)
|
||||||
|
|
||||||
|
parseBrilFromPath path = do
|
||||||
|
contents <- LB.readFile path
|
||||||
|
return $ parseBrilJSON contents
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue