From f78592378a815bcc2dfabac4538c1ce612d4878d Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Mon, 12 Aug 2024 21:00:52 +0200 Subject: [PATCH] Add IR quadruple definitions --- elna.cabal | 1 + lib/Language/Elna/Intermediate.hs | 44 +++++++++++++++++++++++++ tests/Language/Elna/NameAnalysisSpec.hs | 4 +-- 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 lib/Language/Elna/Intermediate.hs diff --git a/elna.cabal b/elna.cabal index c35d9b7..e82cffc 100644 --- a/elna.cabal +++ b/elna.cabal @@ -31,6 +31,7 @@ library elna-internal import: warnings exposed-modules: Language.Elna.AST + Language.Elna.Intermediate Language.Elna.Location Language.Elna.NameAnalysis Language.Elna.Parser diff --git a/lib/Language/Elna/Intermediate.hs b/lib/Language/Elna/Intermediate.hs new file mode 100644 index 0000000..8c4fec8 --- /dev/null +++ b/lib/Language/Elna/Intermediate.hs @@ -0,0 +1,44 @@ +module Language.Elna.Intermediate + ( Label(..) + , Operand(..) + , Quadruple(..) + , Variable(..) + ) where + +import Data.Int (Int32) +import Data.Word (Word32) +import Data.Text (Text) + +data Operand + = VariableOperand Text + | IntOperand Int32 + deriving (Eq, Show) + +newtype Label = Label Text + deriving (Eq, Show) + +newtype Variable = Variable Text + deriving (Eq, Show) + +data Quadruple + = StartQuadruple + | GoToQuadruple Label + | AssignQuadruple Operand Variable + | ArrayQuadruple Variable Word32 Variable + | ArrayAssignQuadruple Operand Word32 Variable + | AddQuadruple Operand Operand Variable + | SubtractionQuadruple Operand Operand Variable + | ProductQuadruple Operand Operand Variable + | DivisionQuadruple Operand Operand Variable + | NegationQuadruple Operand Variable + | EqualQuadruple Operand Operand Label + | NonEqualQuadruple Operand Operand Label + | LessQuadruple Operand Operand Label + | GreaterQuadruple Operand Operand Label + | LessOrEqualQuadruple Operand Operand Label + | GreaterOrEqualQuadruple Operand Operand Label + | LabelQuadruple Label + | ParameterQuadruple Operand + | CallQuadruple Variable Word32 + | StopQuadruple + deriving (Eq, Show) diff --git a/tests/Language/Elna/NameAnalysisSpec.hs b/tests/Language/Elna/NameAnalysisSpec.hs index c6f4504..10e6ee0 100644 --- a/tests/Language/Elna/NameAnalysisSpec.hs +++ b/tests/Language/Elna/NameAnalysisSpec.hs @@ -57,7 +57,7 @@ spec = describe "nameAnalysis" $ do it "puts parameters into the local symbol table" $ do let given = "proc main(ref param: int) {}" - expected = SymbolTable.enter "param" (VariableInfo intType True) SymbolTable.empty + expected = SymbolTable.enter "param" (VariableInfo True intType) SymbolTable.empty actual <- nameAnalysisOnText given case SymbolTable.lookup "main" <$> actual of @@ -68,7 +68,7 @@ spec = describe "nameAnalysis" $ do it "puts variables into the local symbol table" $ do let given = "proc main() { var var1: int; }" - expected = SymbolTable.enter "var1" (VariableInfo intType False) SymbolTable.empty + expected = SymbolTable.enter "var1" (VariableInfo False intType) SymbolTable.empty actual <- nameAnalysisOnText given case SymbolTable.lookup "main" <$> actual of