The serializability of concurrent database updates
Journal of the ACM (JACM)
A Deterministic Attribute Grammar Evaluator Based on Dynamic Scheduling
ACM Transactions on Programming Languages and Systems (TOPLAS)
Space-Efficient Storage Management in an Attribute Grammar Evaluator
ACM Transactions on Programming Languages and Systems (TOPLAS)
Semantic evaluation from left to right
Communications of the ACM
Automatic generation of near-optimal linear-time translators for non-circular attribute grammars
POPL '79 Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Systematic design of program analysis frameworks
POPL '79 Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A Programming Methodology in Compiler Construction
A Programming Methodology in Compiler Construction
On Constructing Efficient Evaluators for Attribute Grammars
Proceedings of the Fifth Colloquium on Automata, Languages and Programming
Pragmatics in a complier production system
Symposium on Methods of Algorithmic Language Implementation
Semantic attributes processing in the system DELTA
Symposium on Methods of Algorithmic Language Implementation
On Storage Optimization for Automatically Generated Compilers
Proceedings of the 4th GI-Conference on Theoretical Computer Science
On defining semantics by means of extended attribute grammars
Semantics-Directed Compiler Generation, Proceedings of a Workshop
MUG1 - an incremental compiler-compiler
ACM '76 Proceedings of the 1976 annual conference
LINGUIST-86: Yet another translator writing system based on attribute grammars
SIGPLAN '82 Proceedings of the 1982 SIGPLAN symposium on Compiler construction
A truly generative semantics-directed compiler generator
SIGPLAN '82 Proceedings of the 1982 SIGPLAN symposium on Compiler construction
Automatic generation of efficient evaluators for attribute grammars
POPL '76 Proceedings of the 3rd ACM SIGACT-SIGPLAN symposium on Principles on programming languages
Detecting global variables in denotational specifications
ACM Transactions on Programming Languages and Systems (TOPLAS) - Lecture notes in computer science Vol. 174
A globalizing transformation for attribute grammars
SIGPLAN '86 Proceedings of the 1986 SIGPLAN symposium on Compiler construction
Algorithm specification in a very high level language
ACM '87 Proceedings of the 1987 Fall Joint Computer Conference on Exploring technology: today and tomorrow
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proving the correctness of storage representations
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
In-place updates in the presence of control operators
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
The aggregate update problem in functional programming systems
POPL '85 Proceedings of the 12th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Global storage allocation in attribute evaluation
POPL '86 Proceedings of the 13th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Hi-index | 0.00 |
A defining characteristic of “functional” specifications is the absence of assignments: updates of tables and data structures are expressed by giving the relationship between the new and old values. An obvious implementation allocates separate space for new and old values and may consume a lot of storage. However, even when updates of attributes like symbol tables are expressed functionally, we would like to avoid making copies of the symbol table during attribute evaluation. In other words, if possible, the implementation should have a single global copy of the table that is updated using assignments. Since the value of the global copy changes during computation, the order of evaluation has to be chosen carefully. In this paper, we partition attributes into classes, the problem being to determine if there exists an evaluation order that allows each class to share a global storage area. The solution extends to handle symbol tables for block structured languages. More precisely, consider a directed acyclic graph D in which vertices represent attribute values to be computed. Associated with each vertex is a label indicating the storage area to be shared by the vertex. Storage used during the evaluation of D is studied by playing a pebble game on D with the following steps: (1) pebble (i.e. place a pebble) on a source; (2) pebble a vertex if all its successors have pebbles (a pebble may be moved to the vertex from one of its successors); (3) pick up a pebble. Each vertex must be pebbled exactly once. The use of global storage is formalized by defining single pebblings, in which at most one of the vertices with a given label has a pebble at any time. The results also apply to a form of pebbling, called chain pebbling, that allows symbol tables for block structured languages to be studied.