org.bitbucket.inkytonik.kiama.attribution.AttributionCore
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).
Has the value of this attribute at t
already been computed or not?
Backing memo table.
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 an IllegalStateException
.
Immediately reset this attribute's memoisation cache.
Run the semantic function f
in a safe manner.
Run the semantic function f
in a safe manner. We need to guard against
f
throwing an exception which aborts the computation, since we could
then leave the global circular attribute state in a funny state.
The attribute's string representation is its name.
The attribute's string representation is its name.
An attribute of a node type
T
with value of typeU
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.