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?
Has the value of this attribute at t already been computed or not?
The memo table as an identity hash map.
The memo table as an identity hash map.
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.
Immediately reset this attribute's memoisation cache.
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.
The attribute's string representation is its name.
The attribute's string representation is its name.
An attribute of a node type
Twith value of typeUwhich 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.