name:           risc386
version:        0.0.20210125
build-type:     Simple
cabal-version:  >= 1.10
license:        BSD3
license-file:   LICENSE
author:         Andreas Abel with contributions by Robert Grabowski and Ulrich Schoepp
maintainer:     Andreas Abel <andreas.abel@ifi.lmu.de>
category:       Compilers/Interpreters, Education
homepage:       http://www2.tcs.ifi.lmu.de/~abel/
synopsis:       Reduced instruction set i386 simulator
description:
  risc386 is a symbolic Intel(R) 386 assembler interpreter which
  allows infinitely many registers (temporaries).  Its purpose is
  to debug the output of a MiniJava compiler (from Andrew Appel's
  book, Modern Compiler Implementation in JAVA) before register
  allocation has been performed.
  .
  risc386 supports only a small fragment of i386 instructions.
  It expects its input to be a list of procedures in .intel_syntax
  each of which is started by a label and terminated by a return
  statement.
  .
  Control flow is restricted, so, only jumps to procedure-local
  labels are allowed.  Reading from an uninitialized memory location
  will lead to an exception.

tested-with:
  GHC == 7.6.3
  GHC == 7.8.4
  GHC == 7.10.3
  GHC == 8.0.2
  GHC == 8.2.2
  GHC == 8.4.4
  GHC == 8.6.5
  GHC == 8.8.4
  GHC == 8.10.3

extra-source-files: CHANGELOG.md
                    README.txt
                    Makefile
                    test/succeed/Makefile
                    test/succeed/*.s
                    test/succeed/*.raw.s
                    test/fail/Makefile
                    test/fail/*.s
                    test/fail/*.err
                    test/fail/*.raw.s
                    test/fail/*.raw.err

source-repository head
  type:     git
  location: git://github.com/andreasabel/risc386.git

executable risc386
  hs-source-dirs:   .
  build-depends:    array >= 0.3 && < 0.6,
                    base >= 4.6 && < 5,
                    containers >= 0.3 && < 0.7,
                    -- mtl-2.1 contains a severe bug
                    mtl >= 2.0 && < 2.1 || >= 2.1.1 && < 2.3,
                    pretty >= 1.0 && < 1.2
  build-tools:      happy >= 1.15 && < 2,
                    alex >= 2.0 && < 4

  default-language: Haskell2010
  other-extensions: MultiParamTypeClasses
                    TypeSynonymInstances
                    FlexibleInstances
                    FlexibleContexts
                    GeneralizedNewtypeDeriving
                    PatternGuards
                    TupleSections

  main-is:          MainIntel.hs
  other-modules:    Frame
                    FrameIntel
                    GenSym
                    Intel
                    LexIntel
                    ParseIntel
                    StateIntel
                    TokenIntel
                    Util
                    Wellformed