macaw/symbolic-syntax
Langston Barrett 836298bcc6 symbolic-syntax: Remove documentation of type aliases
These are no longer part of the base syntax, but can be added on.
2023-11-02 17:06:06 -04:00
..
src/Data/Macaw/Symbolic symbolic-syntax: Remove fresh-vec 2023-11-02 16:39:24 -04:00
test symbolic-syntax: Clarify comments 2023-11-02 16:42:27 -04:00
test-data symbolic-syntax: Remove fresh-vec 2023-11-02 16:39:24 -04:00
LICENSE macaw-symbolic-syntax: Concrete syntax for macaw-symbolic CFGs 2023-11-01 17:19:13 -04:00
macaw-symbolic-syntax.cabal symbolic-syntax: Reuse type alias parsers from crucible-llvm-syntax 2023-11-02 16:34:01 -04:00
README.md symbolic-syntax: Remove documentation of type aliases 2023-11-02 17:06:06 -04:00

macaw-symbolic-syntax

This package provides concrete syntax for macaw-symbolic types and operations.

Concretely, it implements a ParserHooks for use with crucible-syntax. This ParserHooks supports the following types and operations:

Types:

The main type addition is for representing pointers:

  • (Ptr n)

Unlike C/C++, these pointers are untyped and essentially correspond to uint8_t*.

Operations:

The extra operations are:

  • bv-typed-literal :: Type -> Integer -> Bitvector w where the first argument is a Bitvector type alias (see the Types section), the second argument is the value the Bitvector should contain, and w is the number of bits in the returned Bitvector (will match the width of the Type argument). This is useful because (bv <width> ...) only works when you know the exact value of width as a numeral, and types like SizeT map to different widths depending on your architecture.
  • pointer-make-null :: Pointer returns a null pointer.
  • pointer-add :: Pointer -> Bitvector w -> Pointer where w is the number of bits in a pointer (usually 32 or 64).
  • pointer-diff :: Pointer -> Pointer -> Bitvector w where w is the number of bits in a pointer (usually 32 or 64).
  • pointer-sub :: Pointer -> Bitvector w -> Pointer where w is the number of bits in a pointer (usually 32 or 64).
  • pointer-eq :: Pointer -> Pointer -> Bool.
  • pointer-read :: forall (t :: Type) -> Endianness -> Pointer -> t where the first argument is the type of the value to read and the second argument is le or be. Type must either be Bitvector (8 * w) (for some positive number w) or one of the type aliases listed above.
  • pointer-write :: forall (t :: Type) -> Endianness -> Pointer -> t -> Unit where the first argument is the type of the value to read and the second argument is le or be. Type must either be Bitvector (8 * w) (for some positive number w) or one of the type aliases listed above.