Incremental algorithms for evaluating attribute grammars (AGs) have been extensively studied in recent years, primarily because of their application in language-based environments. Ordered attribute grammars are a subclass of AGs for which efficient evaluators can be constructed. Previous incremental algorithms for ordered attribute grammars only allowed one modification to the program at a time, requiring attribute evaluation due to one change to quiesce before another one due to a second change can start. This article presents new incremental evaluation algorithms for ordered attribute grammars that can handle asynchronous program modifications in an optimal manner. Support for asynchronous changes is necessary in environments for multiple users, where different programmers may be making changes to different parts of the program simultaneously. The key to the optimality of the algorithm is an ordering of the attribute evaluations so that an attribute affected by more than one change will only be evaluated once if the changes happen concurrently.
展开▼