Packages

p

be.opimedia

scala_par_am

package scala_par_am

Ordering
  1. Alphabetic
Visibility
  1. Public
  2. All

Type Members

  1. abstract class AbstractMachine[Exp, Abs, Addr, Time] extends AnyRef

    The interface of the abstract machine itself.

    The interface of the abstract machine itself. Abstract class that should be implemented by an abstract machine. Abstract machines that implement that in Scala-Par-AM are AAM*.scala and ParAAM*.scala.

    The abstract machine is parameterized by abstract values, addresses and expressions. Look into AAM.scala for an example of how to define these parameters.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/AbstractMachine.scala

  2. abstract class Action[Exp, Abs, Addr] extends MemoHashCode

    The different kinds of actions that can be taken by the abstract machine

  3. case class ActionError[Exp, Abs, Addr](error: SemanticError)(implicit evidence$37: Expression[Exp], evidence$38: JoinLattice[Abs], evidence$39: Address[Addr]) extends Action[Exp, Abs, Addr] with Product with Serializable

    An error has been reached

  4. case class ActionEval[Exp, Abs, Addr](e: Exp, env: Environment[Addr], store: Store[Addr, Abs], effects: Set[Effect[Addr]] = Set[Effect[Addr]]())(implicit evidence$31: Expression[Exp], evidence$32: JoinLattice[Abs], evidence$33: Address[Addr]) extends Action[Exp, Abs, Addr] with Product with Serializable

    Evaluation continues with expression e in environment env

  5. class ActionHelpers[Exp, Abs, Addr] extends AnyRef
  6. case class ActionPush[Exp, Abs, Addr](frame: Frame, e: Exp, env: Environment[Addr], store: Store[Addr, Abs], effects: Set[Effect[Addr]] = Set[Effect[Addr]]())(implicit evidence$28: Expression[Exp], evidence$29: JoinLattice[Abs], evidence$30: Address[Addr]) extends Action[Exp, Abs, Addr] with Product with Serializable

    A frame needs to be pushed on the stack, and the interpretation continues by evaluating expression e in environment env

  7. case class ActionReachedValue[Exp, Abs, Addr](v: Abs, store: Store[Addr, Abs], effects: Set[Effect[Addr]] = Set[Effect[Addr]]())(implicit evidence$25: Expression[Exp], evidence$26: JoinLattice[Abs], evidence$27: Address[Addr]) extends Action[Exp, Abs, Addr] with Product with Serializable

    A value is reached by the interpreter.

    A value is reached by the interpreter. As a result, a continuation will be popped with the given reached value.

  8. case class ActionStepIn[Exp, Abs, Addr](fexp: Exp, clo: (Exp, Environment[Addr]), e: Exp, env: Environment[Addr], store: Store[Addr, Abs], argsv: List[(Exp, Abs)], effects: Set[Effect[Addr]] = Set[Effect[Addr]]())(implicit evidence$34: Expression[Exp], evidence$35: JoinLattice[Abs], evidence$36: Address[Addr]) extends Action[Exp, Abs, Addr] with Product with Serializable

    Similar to ActionEval, but only used when stepping inside a function's body (clo is therefore the function stepped into).

    Similar to ActionEval, but only used when stepping inside a function's body (clo is therefore the function stepped into). The expressions and values of the arguments should also be provided, as they can be needed by the abstract machine.

  9. trait Address[A] extends AnyRef
  10. trait AddressWrapper extends AnyRef
  11. case class ArityError(name: String, expected: Int, got: Int) extends SemanticError with Product with Serializable
  12. class BaseSchemeSemantics[V, Addr, Time] extends Semantics[SchemeExp, V, Addr, Time]

    Basic Scheme semantics, without any optimization

  13. case class BasicEnvironment[Addr](content: Map[String, Addr])(implicit evidence$2: Address[Addr]) extends Environment[Addr] with Product with Serializable

    Basic mapping from names to addresses

  14. case class BasicKontStore[KontAddr](content: Map[KontAddr, Set[Kont[KontAddr]]])(implicit evidence$3: KontAddress[KontAddr]) extends KontStore[KontAddr] with Product with Serializable
  15. case class BasicStore[Addr, Abs](content: Map[Addr, Abs])(implicit evidence$3: Address[Addr], evidence$4: JoinLattice[Abs]) extends Store[Addr, Abs] with Product with Serializable

    Basic store with no fancy feature, just a map from addresses to values

  16. trait BoolLattice[B] extends LatticeElement[B]

    A lattice for booleans

  17. class BoundedInteger extends AnyRef
  18. case class CannotAccessCar(v: String) extends SemanticError with MemoHashCode with Product with Serializable
  19. case class CannotAccessCdr(v: String) extends SemanticError with MemoHashCode with Product with Serializable
  20. case class CannotAccessVector(vector: String) extends SemanticError with MemoHashCode with Product with Serializable
  21. sealed trait Cardinality extends MemoHashCode

    Cardinality represents how much information a lattice value represents

  22. case class CardinalityNumber(n: Int) extends Cardinality with Product with Serializable
  23. trait CharLattice[C] extends LatticeElement[C]

    A lattice for characters

  24. case class Color(hex: String) extends MemoHashCode with Product with Serializable
  25. trait Count extends MemoHashCode
  26. case class CountingStore[Addr, Abs](content: Map[Addr, (Count, Abs)])(implicit evidence$5: Address[Addr], evidence$6: JoinLattice[Abs]) extends Store[Addr, Abs] with Product with Serializable
  27. abstract class Effect[Addr] extends MemoHashCode
  28. case class EffectAcquire[Addr](target: Addr)(implicit evidence$17: Address[Addr]) extends Effect[Addr] with Product with Serializable
  29. trait EffectKind extends MemoHashCode

    The different kinds of effects that can be generated by the semantics

  30. case class EffectReadConsCar[Addr](target: Addr)(implicit evidence$10: Address[Addr]) extends Effect[Addr] with Product with Serializable
  31. case class EffectReadConsCdr[Addr](target: Addr)(implicit evidence$11: Address[Addr]) extends Effect[Addr] with Product with Serializable
  32. case class EffectReadVariable[Addr](target: Addr)(implicit evidence$9: Address[Addr]) extends Effect[Addr] with Product with Serializable
  33. case class EffectReadVector[Addr](target: Addr)(implicit evidence$12: Address[Addr]) extends Effect[Addr] with Product with Serializable
  34. case class EffectRelease[Addr](target: Addr)(implicit evidence$18: Address[Addr]) extends Effect[Addr] with Product with Serializable
  35. case class EffectWriteConsCar[Addr](target: Addr)(implicit evidence$14: Address[Addr]) extends Effect[Addr] with Product with Serializable
  36. case class EffectWriteConsCdr[Addr](target: Addr)(implicit evidence$15: Address[Addr]) extends Effect[Addr] with Product with Serializable
  37. case class EffectWriteVariable[Addr](target: Addr)(implicit evidence$13: Address[Addr]) extends Effect[Addr] with Product with Serializable
  38. case class EffectWriteVector[Addr](target: Addr)(implicit evidence$16: Address[Addr]) extends Effect[Addr] with Product with Serializable
  39. abstract class Environment[Addr] extends MemoHashCode
  40. abstract class EvalKontMachine[Exp, Abs, Addr, Time] extends AbstractMachine[Exp, Abs, Addr, Time]

    Abstract machine with a control component that works in an eval-kont way: it can either be evaluating something, or have reached a value and will pop a continuation.

  41. trait Expression[E] extends AnyRef
  42. trait Frame extends MemoHashCode
  43. class Graph[N] extends AnyRef

    Represents an immutable directed graph where nodes are elements of N: (source node) -> (id of source node, set of neighbors)

  44. class GraphInfo extends AnyRef

    Several information about a graph.

  45. trait GraphOutput extends AnyRef
  46. trait GraphOutputNode[N] extends AnyRef
  47. case class Identifier(name: String, pos: Position) extends MemoHashCode with Product with Serializable

    An identifier has a name and a position

  48. trait IntLattice[I] extends LatticeElement[I]

    A lattice for integers

  49. trait IsSchemeLattice[L] extends JoinLattice[L]

    A lattice for Scheme should support the following operations

  50. trait JoinLattice[L] extends Monoid[L] with PartialOrdering[L]

    A (join semi-)lattice L should support the following operations

  51. case class Kont[KontAddr](frame: Frame, next: KontAddr)(implicit evidence$1: KontAddress[KontAddr]) extends MemoHashCode with Product with Serializable
  52. trait KontAddress[A] extends AnyRef
  53. abstract class KontStore[KontAddr] extends MemoHashCode
  54. trait LatticeElement[L] extends Order[L] with Monoid[L] with Show[L]

    We define here some domains that can will be useful to build a lattice for most languages.

  55. class MakeSchemeLattice[S, B, I, F, C, Sym] extends SchemeLattice
  56. sealed trait MayFail[L] extends MemoHashCode
  57. case class MayFailBoth[L](l: L, errs: List[SemanticError]) extends MayFail[L] with Product with Serializable
  58. case class MayFailError[L](errs: List[SemanticError]) extends MayFail[L] with Product with Serializable
  59. case class MayFailSuccess[L](l: L) extends MayFail[L] with Product with Serializable
  60. trait MemoHashCode extends Product

    Memoize the default hash code method.

    Memoize the default hash code method. That can be improve use of all immutable object.

  61. case class NotSupported(reason: String) extends SemanticError with Product with Serializable
  62. case class OperatorNotApplicable(name: String, arguments: List[String]) extends SemanticError with Product with Serializable
  63. class ParAAMCHybrid[Exp, Abs, Addr, Time] extends ParAAMCState[Exp, Abs, Addr, Time]

    ParAAMCHybrid: similar than ParAAMCPart and ParAAMCSet when the number of sets in the worklist if greater or equal to the number of available actors.

    ParAAMCHybrid: similar than ParAAMCPart and ParAAMCSet when the number of sets in the worklist if greater or equal to the number of available actors.

    The worklist is implemented by an immutable list of set of states.

    The main method eval() just send the initial state to the first ActorEval.

    Each actor ActorEval evaluates a set of states, updates data, and sends equal part of the worklist to each actor ActorEval available, until to the worklist becomes empty.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMCHybrid.scala

  64. class ParAAMCHybridH[Exp, Abs, Addr, Time] extends ParAAMCState[Exp, Abs, Addr, Time]

    ParAAMCHybridH: ParAAMCHybrid with direct identification of Halted states

    ParAAMCHybridH: ParAAMCHybrid with direct identification of Halted states

    Version of ParAAMCHybrid that includes to the worklist only the not halted states. Halted states are directly identified in the set of successors.

    The worklist is implemented by an immutable list of set of states.

    The main method eval() just send the initial state to the first ActorEval.

    Each actor ActorEval evaluates a set of states, updates data, and sends equal part of the worklist to each actor ActorEval available, until to the worklist becomes empty.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMCHybridH.scala

  65. class ParAAMCPart[Exp, Abs, Addr, Time] extends ParAAMCState[Exp, Abs, Addr, Time]

    ParAAMCPart: ParAAM-C-set for Parallel AAM - Concurrent - set

    ParAAMCPart: ParAAM-C-set for Parallel AAM - Concurrent - set

    Similar to ParAAMCState but sends equal part instead state, and there is NO global worklist.

    The local worklist (named newStates) is implemented by an immutable list of set of states.

    The main method eval() just send the initial state to the first ActorEval.

    Each actor ActorEval evaluates a set of states, updates data, and sends equal part of its local worklist to each actor ActorEval available, until there is no more state to evaluate.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMCPart.scala

  66. class ParAAMCPartH[Exp, Abs, Addr, Time] extends ParAAMCState[Exp, Abs, Addr, Time]

    ParAAMCPartH: ParAAMCPart with direct identification of Halted states

    ParAAMCPartH: ParAAMCPart with direct identification of Halted states

    Version of ParAAMCPart that includes to the worklist only the not halted states. Halted states are directly identified in the set of successors.

    The worklist is implemented by an immutable list of set of states.

    The main method eval() just send the initial state to the first ActorEval.

    Each actor ActorEval evaluates a set of states, updates data, and sends equal part of the worklist to each actor ActorEval available, until to the worklist becomes empty.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMCPartH.scala

  67. class ParAAMCSPart[Exp, Abs, Addr, Time] extends ParAAMCSState[Exp, Abs, Addr, Time]

    ParAAMCSPart: ParAAM-C-S-part for Parallel AAM - Concurrent - Sender - part

    ParAAMCSPart: ParAAM-C-S-part for Parallel AAM - Concurrent - Sender - part

    Similar to ParAAMCSState but sends equal part of the worklist instead state.

    The worklist is implemented by an immutable list of sets of states.

    The main method eval() just starts the unique actor ActorSender. This actor sends the initial state to the first actor ActorEval.

    Each actor ActorEval evaluates a set of states, updates data, and sends that it is now available to the actor ActorSender.

    Each time that the ActorSender receives a message from an actor ActorEval, it sends equal part of the worklist to each actor ActorEval available, until to the worklist becomes empty.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMCSPart.scala

  68. class ParAAMCSSet[Exp, Abs, Addr, Time] extends ParAAMCSState[Exp, Abs, Addr, Time]

    ParAAMCSSet: ParAAM-C-S-set for Parallel AAM - Concurrent - Sender - set

    ParAAMCSSet: ParAAM-C-S-set for Parallel AAM - Concurrent - Sender - set

    Similar to ParAAMCSState but sends set of states instead state.

    The worklist is implemented by an immutable list of sets of states.

    The main method eval() just starts the unique actor ActorSender. This actor sends the initial state to the first actor ActorEval.

    Each actor ActorEval evaluates a set of states, updates data, and sends that it is now available to the actor ActorSender.

    Each time that the ActorSender receives a message from an actor ActorEval, it sends one set of states of the worklist to each actor ActorEval available, until to the worklist becomes empty.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMCSSet.scala

  69. class ParAAMCSState[Exp, Abs, Addr, Time] extends ParAAMLSAState[Exp, Abs, Addr, Time]

    ParAAMCSState: ParAAM-C-S-state for Parallel AAM - Concurrent - Sender - state

    ParAAMCSState: ParAAM-C-S-state for Parallel AAM - Concurrent - Sender - state

    The worklist is implemented by an immutable list of sets of states.

    The main method eval() just starts the unique actor ActorSender. This actor sends the initial state to the first actor ActorEval.

    Each actor ActorEval evaluates a state, updates data, and sends that it is now available to the actor ActorSender.

    Each time that the ActorSender receives a message from an actor ActorEval, it sends one state of the worklist to each actor ActorEval available, until to the worklist becomes empty.

    Extend ParAAMLSAState class to reuse common code.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMCSState.scala

  70. class ParAAMCSet[Exp, Abs, Addr, Time] extends ParAAMCState[Exp, Abs, Addr, Time]

    ParAAMCSet: ParAAM-C-set for Parallel AAM - Concurrent - set

    ParAAMCSet: ParAAM-C-set for Parallel AAM - Concurrent - set

    Similar to ParAAMCState but sends set of states instead state.

    The worklist is implemented by an immutable list of sets of states.

    The main method eval() just sends the initial state to the first ActorEval.

    Each actor ActorEval evaluates a set of states, updates data, and sends one set of states of the worklist to each actor ActorEval available, until to the worklist becomes empty.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMCSet.scala

  71. class ParAAMCSetH[Exp, Abs, Addr, Time] extends ParAAMCState[Exp, Abs, Addr, Time]

    ParAAMCSetH: ParAAMCSet with direct identification of Halted states

    ParAAMCSetH: ParAAMCSet with direct identification of Halted states

    Version of ParAAMCSet that includes to the worklist only the not halted states. Halted states are directly identified in the set of successors.

    The worklist is implemented by an immutable list of sets of states.

    The main method eval() just sends the initial state to the first ActorEval.

    Each actor ActorEval evaluates a set of states, updates data, and sends one set of states of the worklist to each actor ActorEval available, until to the worklist becomes empty.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMCSetH.scala

  72. class ParAAMCState[Exp, Abs, Addr, Time] extends ParAAMCSState[Exp, Abs, Addr, Time]

    ParAAMCState: ParAAM-C-state for Parallel AAM - Concurrent - state

    ParAAMCState: ParAAM-C-state for Parallel AAM - Concurrent - state

    The worklist is implemented by an immutable list of sets of states.

    The main method eval() just sends the initial state to the first ActorEval.

    Each actor ActorEval evaluates a state, updates data, and sends one state of the worklist to each actor ActorEval available, until to the worklist becomes empty.

    Extend ParAAMCSState class to reuse common code.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMCState.scala

  73. class ParAAMLSAPart[Exp, Abs, Addr, Time] extends ParAAMLSAState[Exp, Abs, Addr, Time]

    ParAAMLSAPart: ParAAM-L-SA-part for Parallel AAM - Loop - SenderAggregator - part

    ParAAMLSAPart: ParAAM-L-SA-part for Parallel AAM - Loop - SenderAggregator - part

    Similar to ParAAMLSAState but sends successively equal part of the worklist instead state.

    The worklist is implemented by an immutable list of sets of states.

    The main method eval() loops until the worklist is empty. An unique actor ActorSenderAggregator sends successively equal part of the worklist to actors ActorEval and then collects each of these results.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMLSAPart.scala

  74. class ParAAMLSASet[Exp, Abs, Addr, Time] extends ParAAMLSAState[Exp, Abs, Addr, Time]

    ParAAMLSASet: ParAAM-L-SA-set for Parallel AAM - Loop - SenderAggregator - set

    ParAAMLSASet: ParAAM-L-SA-set for Parallel AAM - Loop - SenderAggregator - set

    Similar to ParAAMLSAState but sends successively set of states instead state.

    The worklist is implemented by an immutable list of sets of states.

    The main method eval() loops until the worklist is empty. An unique actor ActorSenderAggregator sends successively each set of states of the worklist to actors ActorEval (modulo the number of these actors) and then collects each of these results.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMLSASet.scala

  75. class ParAAMLSAState[Exp, Abs, Addr, Time] extends SeqAAM[Exp, Abs, Addr, Time]

    ParAAMLSAState: ParAAM-L-SA-state for Parallel AAM - Loop - SenderAggregator - state

    ParAAMLSAState: ParAAM-L-SA-state for Parallel AAM - Loop - SenderAggregator - state

    The worklist is implemented by an immutable list of sets of states.

    The main method eval() loops until the worklist is empty. An unique actor ActorSenderAggregator sends successively each state of the worklist to actors ActorEval (modulo the number of these actors) and then collects each of these results.

    Extend SeqAAM class to reuse common code.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/ParAAMLSAState.scala

  76. final class Parts[Item] extends Iterable[List[Item]]

    Iterable class to iterates (without deterministic order) on nbPart "equals" parts on items from a sequence of sequences.

    Iterable class to iterates (without deterministic order) on nbPart "equals" parts on items from a sequence of sequences. When totalSize is not divisible by nbPart, the firsts parts contain one item more than the lasts. When totalSize <= nbPart, the result is a sequence of totalSize List of one item.

    totalSize and nbPart must be > 0 and totalSize must be equals to the total number of items in seqs

    By example, Parts(List(Set(1, 2, 3), Set(4, 5, 6, 7, 8, 9, 10), Set(), Set(11, 12)), 12, 5) gives an iterator on List(3, 2, 1), List(6, 5, 4), List(8, 7), List(10, 9), List(12, 11) (with maybe a different order for items from the same set).

    TODO: Possible better idea: The order is not important, so it may be possible to access concurrently to seqs and build parts in parallel.

  77. final class PartsHybrid[Item] extends Iterable[List[Item]]

    Iterable class to iterates (without deterministic order) on nbParts lists items from a sequence of sequences.

    Iterable class to iterates (without deterministic order) on nbParts lists items from a sequence of sequences.

    listSize and nbPart must be > 0 and listSize must be equals to the size of seqs

    By example, PartsHybrid(List(Set(1, 2, 3), Set(4, 5, 6, 7, 8, 9, 10), Set(), Set(11, 12)), 5, 3) gives an iterator on List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), List(11, 12) (with maybe a different order for items from the same set).

  78. sealed trait Position extends MemoHashCode

    This trait represents a position in a source file.

    This trait represents a position in a source file. It's currently a wrapper around scala.util.parsing.input.Position, but will probably be updated in the future.

  79. trait Primitive[Addr, Abs] extends AnyRef

    Each primitive has to implement this trait.

  80. abstract class Primitives[Addr, Abs] extends AnyRef
  81. trait RealLattice[F] extends LatticeElement[F]

    A lattice for floats

  82. trait SExp extends MemoHashCode

    Abstract grammar elements for S-expressions include some positional information.

    Abstract grammar elements for S-expressions include some positional information. This serves two purposes: identify where the s-expression resides in the input file, and as tagging information for the abstract machine.

  83. case class SExpId(id: Identifier) extends SExp with Product with Serializable

    An identifier, such as foo, bar, etc.

  84. class SExpLexer extends Lexical with SExpTokens
  85. case class SExpPair(car: SExp, cdr: SExp, pos: Position) extends SExp with Product with Serializable

    An s-expression is made of pairs, e.g., (foo bar) is represented as the pair with identifier foo as car and another pair -- with identifier bar as car and value nil as cdr -- as cdr.

    An s-expression is made of pairs, e.g., (foo bar) is represented as the pair with identifier foo as car and another pair -- with identifier bar as car and value nil as cdr -- as cdr. Pairs are pretty-printed when converted to string. i.e., (foo bar) is stringified as (foo bar) and not (foo . (bar . ()))

  86. case class SExpQuoted(content: SExp, pos: Position) extends SExp with Product with Serializable

    A quoted element, such as 'foo, '(foo (bar)), etc.

  87. trait SExpTokens extends Tokens
  88. case class SExpValue(value: Value, pos: Position) extends SExp with Product with Serializable

    A literal value, such as 1, "foo", 'foo, etc.

  89. case class SchemeAnd(exps: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    An and expression: (and exps...)

  90. case class SchemeBegin(exps: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    A begin clause: (begin body...)

  91. case class SchemeCase(key: SchemeExp, clauses: List[(List[SchemeValue], List[SchemeExp])], default: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    A case expression: (case key ((vals1...) body1...) ...

    A case expression: (case key ((vals1...) body1...) ... (else default...))

  92. case class SchemeCond(clauses: List[(SchemeExp, List[SchemeExp])], pos: Position) extends SchemeExp with Product with Serializable

    A cond expression: (cond (test1 body1...) ...)

  93. case class SchemeDefineFunction(name: Identifier, args: List[Identifier], body: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    A function definition: (define (name args...) body...)

  94. case class SchemeDefineVariable(name: Identifier, value: SchemeExp, pos: Position) extends SchemeExp with Product with Serializable

    A variable definition: (define name value)

  95. case class SchemeDo(vars: List[(Identifier, SchemeExp, Option[SchemeExp])], test: SchemeExp, finals: List[SchemeExp], commands: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    Do notation: (do ((<variable1> <init1> <step1>) ...) (<test> <expression> ...) <command> ...)

  96. trait SchemeExp extends MemoHashCode

    Abstract syntax of Scheme programs (probably far from complete)

  97. case class SchemeFuncall(f: SchemeExp, args: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    A function call: (f args...)

  98. case class SchemeIf(cond: SchemeExp, cons: SchemeExp, alt: SchemeExp, pos: Position) extends SchemeExp with Product with Serializable

    An if statement: (if cond cons alt) If without alt clauses need to be encoded with an empty begin as alt clause

  99. case class SchemeLambda(args: List[Identifier], body: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    A lambda expression: (lambda (args...) body...) Not supported: "rest"-arguments, of the form (lambda arg body), or (lambda (arg1 .

    A lambda expression: (lambda (args...) body...) Not supported: "rest"-arguments, of the form (lambda arg body), or (lambda (arg1 . args) body...)

  100. trait SchemeLattice extends AnyRef
  101. case class SchemeLet(bindings: List[(Identifier, SchemeExp)], body: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    Let-bindings: (let ((v1 e1) ...) body...)

  102. case class SchemeLetStar(bindings: List[(Identifier, SchemeExp)], body: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    Let*-bindings: (let* ((v1 e1) ...) body...)

  103. case class SchemeLetrec(bindings: List[(Identifier, SchemeExp)], body: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    Letrec-bindings: (letrec ((v1 e1) ...) body...)

  104. case class SchemeNamedLet(name: Identifier, bindings: List[(Identifier, SchemeExp)], body: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    Named-let: (let name ((v1 e1) ...) body...)

  105. case class SchemeOr(exps: List[SchemeExp], pos: Position) extends SchemeExp with Product with Serializable

    An or expression: (or exps...)

  106. class SchemePrimitives[Addr, Abs] extends Primitives[Addr, Abs]

    This is where we define Scheme primitives

  107. case class SchemeQuoted(quoted: SExp, pos: Position) extends SchemeExp with Product with Serializable

    A quoted expression: '(foo (bar baz)) The quoted expression is *not* converted to a Scheme expression, and remains a simple s-expression, because that's exactly what it should be.

  108. class SchemeSemantics[V, Addr, Time] extends BaseSchemeSemantics[V, Addr, Time]

    Extend base Scheme semantics with:

    Extend base Scheme semantics with:

    • atomic evaluation: parts of some constructs can be evaluated atomically without needing to introduce more states in the state graph. For example, (+ 1 1) can directly be evaluated to 2 without modifying the store. Also, to evaluate (+ 1 (f)), we can directly push the continuation and jump to the evaluation of (f), instead of evaluating +, and 1 in separate states.
  109. case class SchemeSet(variable: Identifier, value: SchemeExp, pos: Position) extends SchemeExp with Product with Serializable

    A set! expression: (set! variable value)

  110. case class SchemeValue(value: Value, pos: Position) extends SchemeExp with Product with Serializable

    A literal value (number, symbol, string, ...)

  111. case class SchemeVar(id: Identifier) extends SchemeExp with Product with Serializable

    An identifier: name

  112. trait SemanticError extends MemoHashCode
  113. abstract class Semantics[Exp, Abs, Addr, Time] extends AnyRef

    This is where the interface of a language's semantics is defined.

    This is where the interface of a language's semantics is defined. By defining the semantics of a language, you get an abstract abstract machine for free (but you might need to adapt existing lattices to support values from your language).

    Semantics should be defined as small-step operational semantics. To define a semantics, you have to implement the Semantics trait. You'll need to specialize it on the type of expression of your language (e.g., ??? for ANF, ANFSemantics specializes on ANFExp). To do so, you need to define what actions should be taken when:

    1. Evaluating an expression e (stepEval) 2. Continuing evaluation when a value v has been reached (stepKont)

    To have a simple overview of how semantics should be defined, look at the ANFSemantics.scala, as it defines semantics of ANF Scheme, a very lightweight language. A more complex definition resides in SchemeSemantics.scala.

  114. class SeqAAM[Exp, Abs, Addr, Time] extends EvalKontMachine[Exp, Abs, Addr, Time]

    SeqAAM: Sequential AAM (with list)

    SeqAAM: Sequential AAM (with list)

    This is a reimplementation of the AAM class of Scala-AM written by Quentin Stiévenart. A fork of the original version of Scala-AM used is available here: https://bitbucket.org/OPiMedia/scala-am. The subsumption part has been removed. So this class corresponds in fact to the AAMNS (AAM No Subsumption) class of Scala-AM in this copy repository.

    Compared to AAMNS of Scala-AM this class used Set Scala native data structures instead to specific WorkList and VisitedSet. The recursive loop has been replaced by a for loop.

    The worklist is implemented by an immutable list of states.

    This sequential machine (or the SeqAAMS and SeqAAMLS alternative) is the comparison point for the different version of parallel machines implemented in Scala-Par-AM.

    The original description by Quentin Stiévenart: Implementation of a CESK machine following the AAM approach (Van Horn, David, and Matthew Might. "Abstracting abstract machines." ACM Sigplan Notices. Vol. 45. No. 9. ACM, 2010).

    A difference with the paper is that we separate the continuation store (KontStore) from the value store (Store). That simplifies the implementation of both stores, and the only change it induces is that we are not able to support first-class continuation as easily (we don't support them at all, but they could be added).

    Also, in the paper, a CESK state is made of 4 components: Control, Environment, Store, and Kontinuation. Here, we include the environment in the control component, and we distinguish "eval" states from "continuation" states. An eval state has an attached environment, as an expression needs to be evaluated within this environment, whereas a continuation state only contains the value reached.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/SeqAAM.scala

  115. class SeqAAMLS[Exp, Abs, Addr, Time] extends SeqAAM[Exp, Abs, Addr, Time]

    SeqAAMLS: Sequential AAM with List of Sets

    SeqAAMLS: Sequential AAM with List of Sets

    Version of SeqAAM with a different worklist implementation.

    The worklist is implemented by an immutable list of sets of states.

    Extend SeqAAM class to reuse common code.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/SeqAAMLS.scala

  116. class SeqAAMLSH[Exp, Abs, Addr, Time] extends SeqAAM[Exp, Abs, Addr, Time]

    SeqAAMLSH: SeqAAMLS with direct identification of Halted states

    SeqAAMLSH: SeqAAMLS with direct identification of Halted states

    Version of SeqAAMLS that includes to the worklist only the not halted states. Halted states are directly identified in the set of successors.

    The worklist is implemented by an immutable list of sets of states.

    Extend SeqAAM class to reuse common code.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/SeqAAMLSH.scala

  117. class SeqAAMS[Exp, Abs, Addr, Time] extends SeqAAM[Exp, Abs, Addr, Time]

    SeqAAMS: Sequential AAM with Set

    SeqAAMS: Sequential AAM with Set

    Version of SeqAAM with a different worklist implementation.

    The worklist is implemented by an immutable set of states.

    Extend SeqAAM class to reuse common code.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/machine/SeqAAMS.scala

  118. case class SomePosition(p: scala.util.parsing.input.Position) extends Position with Product with Serializable

    The actual wrapper

  119. abstract class Store[Addr, Abs] extends MemoHashCode
  120. trait StringLattice[S] extends LatticeElement[S]

    A lattice for strings

  121. trait SymbolLattice[Sym] extends LatticeElement[Sym]

    A lattice for symbols

  122. class Timeout extends AnyRef
  123. trait Timestamp[T] extends AnyRef
  124. trait TimestampWrapper extends AnyRef
  125. case class TimestampedKontStore[KontAddr](content: Map[KontAddr, Set[Kont[KontAddr]]], timestamp: Int)(implicit evidence$4: KontAddress[KontAddr]) extends KontStore[KontAddr] with Product with Serializable
  126. case class TypeError(name: String, operand: String, expected: String, got: String) extends SemanticError with Product with Serializable
  127. case class UnboundAddress(addr: String) extends SemanticError with Product with Serializable
  128. case class UnboundVariable(name: Identifier) extends SemanticError with Product with Serializable
  129. case class UserError(reason: String, pos: Position) extends SemanticError with Product with Serializable
  130. sealed abstract class Value extends AnyRef

    S-expressions and related values

  131. case class ValueBoolean(value: Boolean) extends Value with Product with Serializable
  132. case class ValueCharacter(value: Char) extends Value with Product with Serializable
  133. case class ValueInteger(value: Int) extends Value with Product with Serializable
  134. case class ValueReal(value: Double) extends Value with Product with Serializable
  135. case class ValueString(value: String) extends Value with Product with Serializable
  136. case class ValueSymbol(sym: String) extends Value with Product with Serializable
  137. case class VariadicArityError(name: String, min: Int, got: Int) extends SemanticError with Product with Serializable
  138. final class ZipRemainsIterator[Item1, Item2] extends Iterator[(Item1, Item2)]

    Iterator class to iterates on results equal to the zip(seq1, seq2) function and then get the remains of the two initial sequences.

    Iterator class to iterates on results equal to the zip(seq1, seq2) function and then get the remains of the two initial sequences.

    https://www.scala-lang.org/api/current/scala/collection/Iterator.html#zip[B](that:scala.collection.IterableOnce[B]):Iterator[(A,B)]

  139. final class ZipRemainsIterator2[Item1, Item2] extends Iterator[(Item1, Item2)]

    Similar to ZipRemainsIterator but the second sequence is a sequence of non empty sequences and the iteration is done on items of seq1 and items of inner sequences of seqSeq2.

Value Members

  1. object Address
  2. object BoolLattice
  3. object Cardinality
  4. object CardinalityInf extends Cardinality with Product with Serializable
  5. object CardinalityPrimitiveLikeInf
  6. object CardinalityPrimitiveLikeNumber
  7. object CharLattice
  8. object ClassicalAddress extends AddressWrapper
  9. object Colors
  10. object Concrete

    Some implementations of these abstract domains

  11. object ConcreteBooleanEfficient
  12. object Configuration

    Helpers to configure machine

  13. object ConstantPropagation
  14. object Count
  15. object CountInfinity extends Count with Product with Serializable
  16. object CountOne extends Count with Product with Serializable
  17. object Effect
  18. object EffectKind
  19. object Environment
  20. object Expression
  21. object Graph
  22. object GraphDOTOutput extends GraphOutput
  23. object GraphOutputNode
  24. object IntLattice
  25. object IsSchemeLattice extends Serializable
  26. object JoinLattice extends Serializable
  27. object KontStore
  28. object LatticeElement
  29. object Main extends App

    Scala-Par-AM is a modified version of Scala-AM with the goal to study the parallelization of abstract interpretation, focused on analysis of Scheme programs.

    Scala-Par-AM is a modified version of Scala-AM with the goal to study the parallelization of abstract interpretation, focused on analysis of Scheme programs. Some unused parts of Scala-AM have been removed. The essential parts are in the machine/ sub-directory.

    This main program executes some abstract machines on some Scheme programs depending of some parameters and print results in TSV format (data separated by tabulation).

    Run with --help command line parameter to show all options:

    $ java -jar scala-par-am.jar --help
    

    Or directly with the shell script that also set some JVM configurations:

    $ ./scala-par-am.sh --help
    

    This example:

    $ ./scala-par-am.sh --files "Scheme-examples/OPi/factorial*.scm" --machines SeqAAMLS,ParAAMLSAPart,ParAAMCPart --processes 1,4,2
    
    runs on files that match the "Scheme-examples/OPi/factorial*.scm" path with machine SeqAAMLS on 1 process, with machine ParAAMLSAPart on 4 and 2 processes, and with machine ParAAMCPart with 1, 4 and 2 processes.

    scala-par-am.jar can be downloaded directly https://bitbucket.org/OPiMedia/scala-par-am/downloads/

    scala-am.jar must be accessible in the classpath to use oldAAM machine. Download it if necessary: https://bitbucket.org/OPiMedia/scala-am/downloads/

    Depending of command line parameters, for each lattice specified, for each bound, for each address, for each file Scheme program, for default step and/or step with filter, for each machine and for each number of processes this program do the following:

    1. The input Scheme program is parsed. It is done by:

    • Parsing the file as a list of s-expressions (exp/SExp.scala, exp/SExpParser.scala)
    • Compiling these s-expressions into Scheme expressions (exp/scheme/Scheme.scala)

    2. To run the program, we need an abstract machine and some semantics. Semantics definitions have to implement the Semantics interface (semantics/Semantics.scala).

    3. Once the abstract machine is created and we have a semantics for the program we want to analyze, the abstract machine can perform its evaluation, relying on methods of the semantics class to know how to evaluate expressions. The abstract machine only deals with which states to evaluate in which order, where to store values, where to store continuations, how to push and pop continuations, etc. The semantics encode what to do when encountering a program construct. For example, the semantics can tell what to evaluate next, that a continuation needs to be pushed, or that a variable needs to be updated. The abstract machine will then respectively evaluate the expression needed, push the continuation, or update the variable.

    Multiple abstract machine implementations are available, defined in the machine/ directory. Every abstract machine implementation has to implement the AbstractMachine interface (machine/AbstractMachine.scala).

    List of all available machines:

    • oldAAM: to call AAMNS (AAM No Subsumption) of Scala-AM https://bitbucket.org/OPiMedia/scala-am
    • SeqAAM: sequential machine where the worklist implemented with a list of states
    • SeqAAMS: sequential machine where the worklist implemented with a set of states
    • SeqAAMLS: sequential machine where the worklist implemented with a list of sets of states
    • SeqAAMLSH: SeqAAMLS that includes to the worklist only the not halted states
    • ParAAMLSAState: ParAAM-L-SA-state for Parallel AAM - Loop - SenderAggregator - state
    • ParAAMLSASet: ParAAM-L-SA-set for Parallel AAM - Loop - SenderAggregator - set
    • ParAAMLSAPart: ParAAM-L-SA-part for Parallel AAM - Loop - SenderAggregator - part
    • ParAAMCSState: ParAAM-C-S-state for Parallel AAM - Concurrent - Sender - state
    • ParAAMCSSet: ParAAM-C-S-set for Parallel AAM - Concurrent - Sender - set
    • ParAAMCSPart: ParAAM-C-S-part for Parallel AAM - Concurrent - Sender - part
    • ParAAMCState: ParAAM-C-state for Parallel AAM - Concurrent - state
    • ParAAMCSet: ParAAM-C-set for Parallel AAM - Concurrent - set
    • ParAAMCPart: ParAAM-C-part for Parallel AAM - Concurrent - part
    • ParAAMCHybrid: ParAAM-C-hybrid
    • ParAAMCSetH: ParAAM-C-set-halt
    • ParAAMCPartH: ParAAM-C-part-halt
    • ParAAMCHybridH: ParAAM-C-hybrid-halt

    The abstract machine also uses a lattice to represent values. Lattices should implement the JoinLattice trait that can be found in lattice/JoinLattice.scala, which provides the basic features of a lattice.

    Source https://bitbucket.org/OPiMedia/scala-par-am/src/master/scala-par-am/src/main/scala/Main.scala

    Authors:

    Olivier Pirson

    Quentin Stiévenart (for the original Scala-AM that composes the biggest part of this project)

    Version

    June 18, 2020

  30. object MayFail
  31. object Parts
  32. object PartsHybrid
  33. object Position
  34. object ReadEffect extends EffectKind with Product with Serializable
  35. object RealLattice
  36. object SExpList
  37. object SExpParser extends TokenParsers
  38. object Scheme
  39. object SchemeCompiler

    Object that provides a method to compile an s-expression into a Scheme expression

  40. object SchemeExp
  41. object SchemeLattices
  42. object SchemeOps
  43. object SchemeUndefiner

    Remove defines from a Scheme expression, replacing them by let bindings.

    Remove defines from a Scheme expression, replacing them by let bindings. For example: (define foo 1) (define (f x) x) (f foo) Will be converted to: (letrec ((foo 1) (f (lambda (x) x))) (f foo)) Which is semantically equivalent with respect to the end result

  44. object Store
  45. object StringLattice
  46. object SymbolLattice
  47. object Timeout
  48. object Timestamp
  49. object Type
  50. object Util
  51. object ValueNil extends Value
  52. object ValueSensitiveAddress extends AddressWrapper
  53. object WriteEffect extends EffectKind with Product with Serializable
  54. object ZeroCFA extends TimestampWrapper
  55. object ZipRemainsIterator
  56. object ZipRemainsIterator2

Ungrouped