41 lines
1.2 KiB
Lean4
41 lines
1.2 KiB
Lean4
|
|
/-
|
||
|
|
Port of `Main.agda`. Prints the constant- and sign-analysis results for the
|
||
|
|
test program (Agda: `putStrLn (output-Const ++ "\n" ++ output-Sign)`).
|
||
|
|
-/
|
||
|
|
import Spa.Analysis.Sign
|
||
|
|
import Spa.Analysis.Constant
|
||
|
|
|
||
|
|
namespace Spa
|
||
|
|
|
||
|
|
/-- Agda: `testCode`. -/
|
||
|
|
def testCode : Stmt :=
|
||
|
|
.andThen (.basic (.assign "zero" (.num 0)))
|
||
|
|
(.andThen (.basic (.assign "pos" (.add (.var "zero") (.num 1))))
|
||
|
|
(.andThen (.basic (.assign "neg" (.sub (.var "zero") (.num 1))))
|
||
|
|
(.basic (.assign "unknown" (.add (.var "pos") (.var "neg"))))))
|
||
|
|
|
||
|
|
/-- Agda: `testCodeCond₁`. -/
|
||
|
|
def testCodeCond₁ : Stmt :=
|
||
|
|
.andThen (.basic (.assign "var" (.num 1)))
|
||
|
|
(.ifElse (.var "var")
|
||
|
|
(.basic (.assign "var" (.add (.var "var") (.num 1))))
|
||
|
|
(.andThen (.basic (.assign "var" (.sub (.var "var") (.num 1))))
|
||
|
|
(.basic (.assign "var" (.num 1)))))
|
||
|
|
|
||
|
|
/-- Agda: `testCodeCond₂`. -/
|
||
|
|
def testCodeCond₂ : Stmt :=
|
||
|
|
.andThen (.basic (.assign "var" (.num 1)))
|
||
|
|
(.ifElse (.var "var")
|
||
|
|
(.basic (.assign "x" (.num 1)))
|
||
|
|
(.basic .noop))
|
||
|
|
|
||
|
|
/-- Agda: `testProgram`. -/
|
||
|
|
def testProgram : Program := ⟨testCode⟩
|
||
|
|
|
||
|
|
end Spa
|
||
|
|
|
||
|
|
/-- Agda: `main`. -/
|
||
|
|
def main : IO Unit :=
|
||
|
|
IO.println (Spa.ConstAnalysis.output Spa.testProgram ++ "\n" ++
|
||
|
|
Spa.SignAnalysis.output Spa.testProgram)
|