diff options
| author | Eugen Wissner <belka@caraus.de> | 2024-08-12 21:00:52 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2024-08-12 21:00:52 +0200 |
| commit | f78592378a815bcc2dfabac4538c1ce612d4878d (patch) | |
| tree | 9c4b09e2978b8d84c06482ae3a5a857f27ae4a02 | |
| parent | 38a8d6811c302897e3f48f15be1576634f1e3293 (diff) | |
| download | elna-f78592378a815bcc2dfabac4538c1ce612d4878d.tar.gz | |
Add IR quadruple definitions
| -rw-r--r-- | elna.cabal | 1 | ||||
| -rw-r--r-- | lib/Language/Elna/Intermediate.hs | 44 | ||||
| -rw-r--r-- | tests/Language/Elna/NameAnalysisSpec.hs | 4 |
3 files changed, 47 insertions, 2 deletions
@@ -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 |
