class CircularAttribute[T, U] extends Attribute[T, U] with IdMemoised[T, U]
An attribute of a node type T with value of type U which has a circular
definition. The value of the attribute is computed by the function f
which may itself use the value of the attribute. init specifies an
initial value for the attribute. The attribute (and any circular attributes
on which it depends) are evaluated until no value changes (i.e., a fixed
point is reached). The final result is memoised so that subsequent evaluations
return the same value.
This code implements the basic circular evaluation algorithm from "Circular Reference Attributed Grammars - their Evaluation and Applications", by Magnusson and Hedin from LDTA 2003.
- Source
- AttributionCore.scala
- Alphabetic
- By Inheritance
- CircularAttribute
- IdMemoised
- MemoisedBase
- Attribute
- Function1
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new CircularAttribute(name: String, init: U, f: (T) ⇒ U)
Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
andThen[A](g: (U) ⇒ A): (T) ⇒ A
- Definition Classes
- Function1
- Annotations
- @unspecialized()
-
def
apply(t: T): U
Return the value of this attribute for node
t.Return the value of this attribute for node
t. Essentially Figure 6 from the CRAG paper, plus the READY optimisation (section 3.3).- Definition Classes
- CircularAttribute → Function1
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
def
compose[A](g: (A) ⇒ T): (A) ⇒ U
- Definition Classes
- Function1
- Annotations
- @unspecialized()
-
def
dup(t1: T, t2: T, u: U): Unit
Duplicate an entry if possible.
Duplicate an entry if possible. If
t1has a memoised value associated with it, set the value associated witht2to the same value. If there is no value associated witht1, set the value associated witht2tou.- Definition Classes
- MemoisedBase
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
get(t: T): Option[U]
Return the value stored at key
tas an option.Return the value stored at key
tas an option.- Definition Classes
- MemoisedBase
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
def
getWithDefault(t: T, u: U): U
Return the value stored at key
tif there is one, otherwise returnu.Return the value stored at key
tif there is one, otherwise returnu.- Definition Classes
- MemoisedBase
-
def
hasBeenComputedAt(t: T): Boolean
Has the value of this attribute at
talready been computed or not?Has the value of this attribute at
talready been computed or not?- Definition Classes
- CircularAttribute → MemoisedBase
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
val
memo: Cache[AnyRef, AnyRef]
The memo table.
The memo table.
- Definition Classes
- IdMemoised → MemoisedBase
-
val
name: String
- Definition Classes
- Attribute
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
-
def
put(t: T, u: U): Unit
Store the value
uunder the keyt.Store the value
uunder the keyt.- Definition Classes
- MemoisedBase
-
def
putIfNotPresent(t: T, u: U): Unit
Store the value
uunder the keytiftdoes not already have an associated value.Store the value
uunder the keytiftdoes not already have an associated value.- Definition Classes
- MemoisedBase
-
def
reportCycle(t: T): U
Report a cycle in the calculation of this attribute discovered when evaluating the attribute on value
t.Report a cycle in the calculation of this attribute discovered when evaluating the attribute on value
t. Throws anIllegalStateException.- Definition Classes
- Attribute
-
def
reset(): Unit
Immediately reset this attribute's memoisation cache.
Immediately reset this attribute's memoisation cache.
- Definition Classes
- CircularAttribute → MemoisedBase
-
def
resetAt(t: T): Unit
Immediately reset the memo table at
t.Immediately reset the memo table at
t.- Definition Classes
- MemoisedBase
-
def
resetIfRequested(): Unit
Check to see if a reset has been requested via the common memo version, and if so, do it.
Check to see if a reset has been requested via the common memo version, and if so, do it.
- Definition Classes
- MemoisedBase
-
def
safef(t: T): U
Run the semantic function
fin a safe manner.Run the semantic function
fin a safe manner. We need to guard againstfthrowing an exception which aborts the computation, since we could then leave the global circular attribute state in a funny state. -
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
The attribute's string representation is its name.
The attribute's string representation is its name.
- Definition Classes
- Attribute → Function1 → AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )