We have written a set of computer programs for testing and exercising programming language specifications given in the style of denotational semantics. The system is built largely in Scheme 84, a dialect of LISP that serves as an efficient lambda-calculus interpreter. The system consists of:• a syntax-directed transducer, which embodies the principle of compositionality,• a type checker, which is extremely useful in debugging semantic definitions, and• an interface to the yacc parser-generator, which allows the system to use concrete syntax rather than the often cumbersome abstract syntax for its programs.In this paper, we discuss the design of the system, its implementation, and discuss its use.
{"title":"A semantic prototyping system","authors":"M. Wand","doi":"10.1145/502874.502895","DOIUrl":"https://doi.org/10.1145/502874.502895","url":null,"abstract":"We have written a set of computer programs for testing and exercising programming language specifications given in the style of denotational semantics. The system is built largely in Scheme 84, a dialect of LISP that serves as an efficient lambda-calculus interpreter. The system consists of:• a syntax-directed transducer, which embodies the principle of compositionality,• a type checker, which is extremely useful in debugging semantic definitions, and• an interface to the yacc parser-generator, which allows the system to use concrete syntax rather than the often cumbersome abstract syntax for its programs.In this paper, we discuss the design of the system, its implementation, and discuss its use.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"43 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1984-06-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127519107","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
This paper discusses the efficient implementation of Ada's visibility requirements. A scope stack and an unstructured name space are used to facilitate separate compilation and ensure that each Ada declaration takes a constant unit of time. Visibility issues affect practically every aspect of semantic analysis in Ada: declarations, statements, expressions, and separate compilation. The design of the symbol table package is, thus, a critical one. In this paper, I discuss the design goals of the symbol table for the Ada Integrated Environment (AIE) bootstrap compiler front end, and how they were influenced by the Ada language. Since the compiler is being heavily used by the AIE project, we have ample data with which to measure symbol table performance.
{"title":"An efficient implementation of visibility in Ada","authors":"M. Blower","doi":"10.1145/502949.502899","DOIUrl":"https://doi.org/10.1145/502949.502899","url":null,"abstract":"This paper discusses the efficient implementation of Ada's visibility requirements. A scope stack and an unstructured name space are used to facilitate separate compilation and ensure that each Ada declaration takes a constant unit of time. Visibility issues affect practically every aspect of semantic analysis in Ada: declarations, statements, expressions, and separate compilation. The design of the symbol table package is, thus, a critical one. In this paper, I discuss the design goals of the symbol table for the Ada Integrated Environment (AIE) bootstrap compiler front end, and how they were influenced by the Ada language. Since the compiler is being heavily used by the AIE project, we have ample data with which to measure symbol table performance.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"38 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1984-06-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123340395","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Magpie is an interactive, integrate programming environment that supports the development of Pascal programs a powerful, single-user workstation. Incremental compilation techniques are used to provide quick feedback on static errors and to ensure that a program is always ready for execution even while it is being edited. Magpie performs syntax and static semantic analysis with the unit of incrementality of a single character. Magpie uses incremental compilation to achieve performance levels that allow Pascal to be used interactively and as its own debugging language.
{"title":"Incremental compilation in Magpie","authors":"M. Schwartz, N. M. Delisle, Vimal S. Begwani","doi":"10.1145/502874.502887","DOIUrl":"https://doi.org/10.1145/502874.502887","url":null,"abstract":"Magpie is an interactive, integrate programming environment that supports the development of Pascal programs a powerful, single-user workstation. Incremental compilation techniques are used to provide quick feedback on static errors and to ensure that a program is always ready for execution even while it is being edited. Magpie performs syntax and static semantic analysis with the unit of incrementality of a single character. Magpie uses incremental compilation to achieve performance levels that allow Pascal to be used interactively and as its own debugging language.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"9 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1984-06-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124921347","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
This paper presents a new strategy for evaluating attribute grammars, sub-protocol attribute evaluation, and gives an algorithm for constructing sub-protocol-evaluators. Sub-protocol-evaluators can be built for any non-circular attribute grammar; this paper describes how to construct them for absolutely noncircular grammars [4]. Sub-protocol-evaluators are most easily understood as a simple optimization of another evaluator we call the protocol-evaluator. The protocol-evaluator has elements in common with the tree-walk evaluator of Kennedy-Warren [4] and with Nielson's direct evaluator [6]; it can be viewed as a refinement of each of these. Furthermore, the uniform AGs, proposed by Warren [9], and the ordered AGs, proposed by Kastens [3], are both subclasses of grammars for which especially efficient protocol-evaluators can be built.
{"title":"Sub-protocol-evaluators for attribute grammars","authors":"Rodney Farrow","doi":"10.1145/502874.502881","DOIUrl":"https://doi.org/10.1145/502874.502881","url":null,"abstract":"This paper presents a new strategy for evaluating attribute grammars, sub-protocol attribute evaluation, and gives an algorithm for constructing sub-protocol-evaluators. Sub-protocol-evaluators can be built for any non-circular attribute grammar; this paper describes how to construct them for absolutely noncircular grammars [4]. Sub-protocol-evaluators are most easily understood as a simple optimization of another evaluator we call the protocol-evaluator. The protocol-evaluator has elements in common with the tree-walk evaluator of Kennedy-Warren [4] and with Nielson's direct evaluator [6]; it can be viewed as a refinement of each of these. Furthermore, the uniform AGs, proposed by Warren [9], and the ordered AGs, proposed by Kastens [3], are both subclasses of grammars for which especially efficient protocol-evaluators can be built.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"17 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1984-06-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129976288","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
This paper describes a system that automatically generates peephole optimizations. A general peephole optimizer driven by a machine description produces optimizations at compile-compile time for a fast, pattern-directed, compile-time optimizer. They form part of a compiler that simplifies retargeting by substituting peephole optimization for case analysis.
{"title":"Automatic generation of peephole optimizations","authors":"J. Davidson, C. Fraser","doi":"10.1145/502874.502885","DOIUrl":"https://doi.org/10.1145/502874.502885","url":null,"abstract":"This paper describes a system that automatically generates peephole optimizations. A general peephole optimizer driven by a machine description produces optimizations at compile-compile time for a fast, pattern-directed, compile-time optimizer. They form part of a compiler that simplifies retargeting by substituting peephole optimization for case analysis.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1984-06-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125471937","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
This paper describes the aspects of the Ada compiler for the Air Force Ada Integrated Environment (AIE) that are concerned with sharing code among generic instances. Sharing is achieved by forming equivalence classes of generic instances and sharing executable code among members of the class. This approach achieves the required efficiency for embedded applications while minimizing the storage consumed by the executable code of generic instances.
{"title":"Sharing code among instances of Ada generics","authors":"G. Bray","doi":"10.1145/502874.502901","DOIUrl":"https://doi.org/10.1145/502874.502901","url":null,"abstract":"This paper describes the aspects of the Ada compiler for the Air Force Ada Integrated Environment (AIE) that are concerned with sharing code among generic instances. Sharing is achieved by forming equivalence classes of generic instances and sharing executable code among members of the class. This approach achieves the required efficiency for embedded applications while minimizing the storage consumed by the executable code of generic instances.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1984-06-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130526040","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
S. Keller, J. Perkins, Teri F. Payton, S. P. Mardinly
A formal description technique for describing transformations from one well-defined language to another is introduced. A TT-grammar contains context-free grammars for describing the syntax of both languages. The transformation between the languages is described by a relationship of productions from the grammars. The TT-grammar is supported by an automated tool. SSAGS -- a translator writing system based on attribute grammars -- has been extended to support certain classes of TT-grammars. SSAGS analyzes TT-grammars and automatically generates Ada source programs implementing the transformation specified by the TT-grammar. Experience with two different restricted forms of TT-grammars is described with respect to their practical application. The experience demonstrates the readability, ease of development, and additional verification available through the use of TT-grammars.
{"title":"Tree transformation techniques and experiences","authors":"S. Keller, J. Perkins, Teri F. Payton, S. P. Mardinly","doi":"10.1145/502874.502893","DOIUrl":"https://doi.org/10.1145/502874.502893","url":null,"abstract":"A formal description technique for describing transformations from one well-defined language to another is introduced. A TT-grammar contains context-free grammars for describing the syntax of both languages. The transformation between the languages is described by a relationship of productions from the grammars. The TT-grammar is supported by an automated tool. SSAGS -- a translator writing system based on attribute grammars -- has been extended to support certain classes of TT-grammars. SSAGS analyzes TT-grammars and automatically generates Ada source programs implementing the transformation specified by the TT-grammar. Experience with two different restricted forms of TT-grammars is described with respect to their practical application. The experience demonstrates the readability, ease of development, and additional verification available through the use of TT-grammars.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"47 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1984-06-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"132869175","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
A strategy for performing type checking on programs built out of separately compiled parts is presented. This strategy is used in a programming environment that allows small components of a software system to be reconfigured in different ways. The strategy works by inferring type schemas for all of the undeclared functions used by a component and then unifying each schema with a program library when a configuration is built.
{"title":"Type checking, separate compilation and reusability","authors":"M. Levy","doi":"10.1145/502874.502902","DOIUrl":"https://doi.org/10.1145/502874.502902","url":null,"abstract":"A strategy for performing type checking on programs built out of separately compiled parts is presented. This strategy is used in a programming environment that allows small components of a software system to be reconfigured in different ways. The strategy works by inferring type schemas for all of the undeclared functions used by a component and then unifying each schema with a program library when a configuration is built.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"71 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1984-06-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114396979","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
This paper describes a new approach to code-generation. The central tenet is that there must be a more intimate coupling between register allocation and instruction selection than exists in present-day technology. This is achieved by generating code in very small regions and gradually coalescing the part of the program that is "compiled".
{"title":"Code generation by coagulation","authors":"M. Karr","doi":"10.1145/502874.502875","DOIUrl":"https://doi.org/10.1145/502874.502875","url":null,"abstract":"This paper describes a new approach to code-generation. The central tenet is that there must be a more intimate coupling between register allocation and instruction selection than exists in present-day technology. This is achieved by generating code in very small regions and gradually coalescing the part of the program that is \"compiled\".","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"7 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1984-06-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"123804545","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Peep is an architectural description driven peephole optimizer, that is being adapted for use in the Portable Standard Lisp compiler. Tables of optimizable instructions are generated prior to the creation of the compiler from the architectural description of the target machine. Peep then performs global flow analysis on the target machine code and optimizes instructions as defined in the table. This global flow analysis allows optimization across basic blocks of instructions, and the use of tables created at compiler-generation time minimizes the overhead of discovering optimizable instructions.
{"title":"Peep: an architectural description driven peephole optimizer","authors":"R. Kessler","doi":"10.1145/502874.502884","DOIUrl":"https://doi.org/10.1145/502874.502884","url":null,"abstract":"Peep is an architectural description driven peephole optimizer, that is being adapted for use in the Portable Standard Lisp compiler. Tables of optimizable instructions are generated prior to the creation of the compiler from the architectural description of the target machine. Peep then performs global flow analysis on the target machine code and optimizes instructions as defined in the table. This global flow analysis allows optimization across basic blocks of instructions, and the use of tables created at compiler-generation time minimizes the overhead of discovering optimizable instructions.","PeriodicalId":414056,"journal":{"name":"SIGPLAN Conferences and Workshops","volume":"50 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1984-06-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121924091","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}