Implement Compiler
This commit is contained in:
parent
eb03afe343
commit
8e5fba32f6
3 changed files with 22 additions and 2 deletions
19
app/Compiler.hs
Normal file
19
app/Compiler.hs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
module Compiler where
|
||||
|
||||
import qualified AbstractSyntaxTree as AST
|
||||
|
||||
data Command = Const Int -- Load integer const
|
||||
| Add
|
||||
| Sub
|
||||
| Mult
|
||||
| Div
|
||||
deriving Show
|
||||
|
||||
compile :: AST.AST -> [Command]
|
||||
compile = reverse . compile'
|
||||
where compile' ast = case ast of
|
||||
AST.Scalar i -> [Const i]
|
||||
AST.Operation AST.Add left right -> Add : compile' left ++ compile' right
|
||||
AST.Operation AST.Sub left right -> Sub : compile' left ++ compile' right
|
||||
AST.Operation AST.Mult left right -> Mult : compile' left ++ compile' right
|
||||
AST.Operation AST.Div left right -> Div : compile' left ++ compile' right
|
||||
|
|
@ -3,10 +3,11 @@ module Main where
|
|||
import qualified Lexer
|
||||
import qualified Parser
|
||||
import qualified AbstractSyntaxTree as AST
|
||||
import qualified Compiler
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
source <- readFile "arithmetic.txt"
|
||||
case Parser.parse $ Lexer.lex source of
|
||||
Just source -> print $ AST.createAST source
|
||||
Just source -> print $ Compiler.compile $ AST.createAST source
|
||||
_ -> putStr "Some error"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue