summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2024-08-12 21:00:52 +0200
committerEugen Wissner <belka@caraus.de>2024-08-12 21:00:52 +0200
commitf78592378a815bcc2dfabac4538c1ce612d4878d (patch)
tree9c4b09e2978b8d84c06482ae3a5a857f27ae4a02 /lib
parent38a8d6811c302897e3f48f15be1576634f1e3293 (diff)
downloadelna-f78592378a815bcc2dfabac4538c1ce612d4878d.tar.gz
Add IR quadruple definitions
Diffstat (limited to 'lib')
-rw-r--r--lib/Language/Elna/Intermediate.hs44
1 files changed, 44 insertions, 0 deletions
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)