Pub Date : 1995-07-01DOI: 10.1016/0096-0551(95)00005-O
Christoph W. Keβler , Thomas Rauber
We consider the NP-complete problem of generating contiguous evaluations for expression DAGs with a minimal number of registers. We present two algorithms that generate optimal contiguous evaluation for a given DAG. The first is a modification of a complete search algorithm that omits the generation of redundant evaluations. The second algorithm generates only the most promising evaluations by splitting the DAG into trees with import and export nodes and evaluating the trees with a modified labeling scheme. Experiments with randomly generated DAGs and large DAGs from real application programs confirm that the new algorithms generate optimal contiguous evaluations quite fast.
{"title":"Generating optimal contiguous evaluations for expression DAGs","authors":"Christoph W. Keβler , Thomas Rauber","doi":"10.1016/0096-0551(95)00005-O","DOIUrl":"10.1016/0096-0551(95)00005-O","url":null,"abstract":"<div><p>We consider the NP-complete problem of generating contiguous evaluations for expression DAGs with a minimal number of registers. We present two algorithms that generate optimal contiguous evaluation for a given DAG. The first is a modification of a complete search algorithm that omits the generation of redundant evaluations. The second algorithm generates only the most promising evaluations by splitting the DAG into trees with import and export nodes and evaluating the trees with a modified labeling scheme. Experiments with randomly generated DAGs and large DAGs from real application programs confirm that the new algorithms generate optimal contiguous evaluations quite fast.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"21 2","pages":"Pages 113-127"},"PeriodicalIF":0.0,"publicationDate":"1995-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/0096-0551(95)00005-O","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"89732721","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}
Pub Date : 1995-07-01DOI: 10.1016/0096-0551(95)00004-N
Kelvin S. Bryant , Jon Mauney
We present a system for producing retargetable code generators containing coloring-based register allocators. The compiler writer specifies the overall register characteristics of the target machine, as well as the specific register requirements of individual assembly instructions. A Code Generator Prepass processes the specific instruction requirements so that they can be considered during register allocation. We also present our notion of “generic” coloring algorithms which simplify the retargeting of register allocators to different architectures. The system is suitable for RISC and CISC architectures
{"title":"Gras: A general framework for combining automatic code generation and register allocation","authors":"Kelvin S. Bryant , Jon Mauney","doi":"10.1016/0096-0551(95)00004-N","DOIUrl":"https://doi.org/10.1016/0096-0551(95)00004-N","url":null,"abstract":"<div><p>We present a system for producing retargetable code generators containing coloring-based register allocators. The compiler writer specifies the overall register characteristics of the target machine, as well as the specific register requirements of individual assembly instructions. A Code Generator Prepass processes the specific instruction requirements so that they can be considered during register allocation. We also present our notion of “generic” coloring algorithms which simplify the retargeting of register allocators to different architectures. The system is suitable for RISC and CISC architectures</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"21 2","pages":"Pages 101-112"},"PeriodicalIF":0.0,"publicationDate":"1995-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/0096-0551(95)00004-N","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"91591818","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}
Pub Date : 1995-07-01DOI: 10.1016/0096-0551(95)00003-M
K.W. Ng , C.K. Luk
This paper presents a multiparadigm language I+ which is an integration of the three major programming paradigms: object-oriented, logic and functional. I+ has an object-oriented framework in which the notions of classes, objects, methods, inheritance and message passing are supported. Methods may be specified as clauses or functions, thus the two declarative paradigms are incorporated at the method level of the object-oriented paradigm. In addition, two levels of parallelism may be exploited in I+ programming. Therefore I+ is a multiparadigm language for object-oriented declarative programming as well as parallel programming.
{"title":"I+: A multiparadigm language for object-oriented declarative programming","authors":"K.W. Ng , C.K. Luk","doi":"10.1016/0096-0551(95)00003-M","DOIUrl":"https://doi.org/10.1016/0096-0551(95)00003-M","url":null,"abstract":"<div><p>This paper presents a multiparadigm language <em>I</em><sup>+</sup> which is an integration of the three major programming paradigms: object-oriented, logic and functional. <em>I</em><sup>+</sup> has an object-oriented framework in which the notions of classes, objects, methods, inheritance and message passing are supported. Methods may be specified as clauses or functions, thus the two declarative paradigms are incorporated at the method level of the object-oriented paradigm. In addition, two levels of parallelism may be exploited in <em>I</em><sup>+</sup> programming. Therefore <em>I</em><sup>+</sup> is a multiparadigm language for object-oriented declarative programming as well as parallel programming.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"21 2","pages":"Pages 81-100"},"PeriodicalIF":0.0,"publicationDate":"1995-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/0096-0551(95)00003-M","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"91748265","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}
Pub Date : 1995-04-01DOI: 10.1016/0096-0551(94)00016-J
Albert Nymeyer
The Seeheim Model of human-computer interaction partitions an interactive application into a user-interface, a dialogue controller and the application itself. One of the formal techniques of implementing the dialogue controller is based on context-free grammars and automata. In this work, we modify an off-the-shelf compiler generator (YACC) to generate the dialogue controller. The dialogue controller is then integrated into the popular X-window system, to create an interactive-application generator. The actions of the user drive the automaton, which in turn controls the application.
{"title":"A grammatical specification of human-computer dialogue","authors":"Albert Nymeyer","doi":"10.1016/0096-0551(94)00016-J","DOIUrl":"https://doi.org/10.1016/0096-0551(94)00016-J","url":null,"abstract":"<div><p>The Seeheim Model of human-computer interaction partitions an interactive application into a user-interface, a dialogue controller and the application itself. One of the formal techniques of implementing the dialogue controller is based on context-free grammars and automata. In this work, we modify an off-the-shelf compiler generator (YACC) to generate the dialogue controller. The dialogue controller is then integrated into the popular X-window system, to create an interactive-application generator. The actions of the user drive the automaton, which in turn controls the application.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"21 1","pages":"Pages 1-16"},"PeriodicalIF":0.0,"publicationDate":"1995-04-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/0096-0551(94)00016-J","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"89993110","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}
Pub Date : 1995-04-01DOI: 10.1016/0096-0551(95)00001-K
R. Venugopal, Y.N. Srikant
In this paper, we look at the problem of scheduling expression trees with reusable registers on delayed load architectures. Reusable registers come into the picture when the compiler has a data-flow analyzer which is able to estimate the extent of use of the registers. Earlier work considered the same problem without allowing for register variables. Subsequently, Venugopal considered non-reusable registers in the tree. We further extend these efforts to consider a much more general form of the tree. We describe an approximate algorithm for the problem. We formally prove that the code schedule produced by this algorithm will, in the worst case, generate one interlock and use just one more register than that used by the optimal schedule. Spilling is minimized. The approximate algorithm is simple and has linear complexity.
{"title":"Scheduling expression trees with reusable registers on delayed-load architectures","authors":"R. Venugopal, Y.N. Srikant","doi":"10.1016/0096-0551(95)00001-K","DOIUrl":"10.1016/0096-0551(95)00001-K","url":null,"abstract":"<div><p>In this paper, we look at the problem of scheduling expression trees with reusable registers on delayed load architectures. Reusable registers come into the picture when the compiler has a data-flow analyzer which is able to estimate the extent of use of the registers. Earlier work considered the same problem without allowing for register variables. Subsequently, Venugopal considered non-reusable registers in the tree. We further extend these efforts to consider a much more general form of the tree. We describe an approximate algorithm for the problem. We formally prove that the code schedule produced by this algorithm will, in the worst case, generate one interlock and use just one more register than that used by the optimal schedule. Spilling is minimized. The approximate algorithm is simple and has linear complexity.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"21 1","pages":"Pages 49-65"},"PeriodicalIF":0.0,"publicationDate":"1995-04-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/0096-0551(95)00001-K","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"79589655","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}
Pub Date : 1995-04-01DOI: 10.1016/0096-0551(94)00013-G
James M. Purtilo, Thomas M. Swiss, Elizabeth White L.
The development of a large-scale software application naturally lends itself to a top-down development process where the problem is divided into smaller problems that are dispersed among multiple people or teams. Once these sub-problems have been solved, the software components or modules implementing these solutions are integrated into the whole for a final solution. In a component-based environment, large applications are constructed by combining software components in a variety of ways. In such an environment, the components may be implemented in different languages and be distributed across different machines. Alternately, these modules may be different parts of a program running in a single address space. These options (and the many options in between) require different techniques for integration. Software packaging is an important method for assisting in the process of assembling large programs from separate pieces, especially over a heterogeneous environment (an environment consisting of different machines, architecture, languages or operating systems). A software packager is a tool that takes a description of the modules of a program, the available connection methods, and the final desired connection geometry, and creates the integration methods to create the application.
{"title":"Extracting program structure for packaging in a component-based environment","authors":"James M. Purtilo, Thomas M. Swiss, Elizabeth White L.","doi":"10.1016/0096-0551(94)00013-G","DOIUrl":"https://doi.org/10.1016/0096-0551(94)00013-G","url":null,"abstract":"<div><p>The development of a large-scale software application naturally lends itself to a top-down development process where the problem is divided into smaller problems that are dispersed among multiple people or teams. Once these sub-problems have been solved, the software components or <em>modules</em> implementing these solutions are integrated into the whole for a final solution. In a component-based environment, large applications are constructed by combining software components in a variety of ways. In such an environment, the components may be implemented in different languages and be distributed across different machines. Alternately, these modules may be different parts of a program running in a single address space. These options (and the many options in between) require different techniques for integration. Software packaging is an important method for assisting in the process of assembling large programs from separate pieces, especially over a heterogeneous environment (an environment consisting of different machines, architecture, languages or operating systems). A software packager is a tool that takes a description of the modules of a program, the available connection methods, and the final desired connection geometry, and creates the integration methods to create the application.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"21 1","pages":"Pages 39-48"},"PeriodicalIF":0.0,"publicationDate":"1995-04-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/0096-0551(94)00013-G","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"91603566","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}
Pub Date : 1995-04-01DOI: 10.1016/0096-0551(94)00015-I
Richard H. Crawford, Ronald A. Olsson, W.Wilson Ho, Christopher E. Wee
The design of debugging tools is often ad hoc, with tools tailor-made for specific target languages and operating systems. Consequently, no unified theory of debugger design has emerged. Especially neglected is the design of languages to control debugging activities—and fundamental issues that arise in the implementation and use of such languages. We introduce GDL, a powerful low-level debugging language whose primitives capture the intuitive, informal semantics used in imperative debugging. GDL can be extended to incorporate higher-level constructs, hence we use it as our vehicle to examine central semantic issues that confront designers and implementors of debugging languages.
We gauge the efficiency of various GDL constructs on typical architectures and highlight semantic issues arising from the integration of those mechanisms. Our exploration of semantic issues is intended to provide guidance for designers of debugging languages, to ensure all high-level language features can be mapped cleanly and efficiently onto underlying architectural hooks, without endangering the semantic integrity of those high-level constructs.
{"title":"Semantic issues in the design of languages for debugging","authors":"Richard H. Crawford, Ronald A. Olsson, W.Wilson Ho, Christopher E. Wee","doi":"10.1016/0096-0551(94)00015-I","DOIUrl":"https://doi.org/10.1016/0096-0551(94)00015-I","url":null,"abstract":"<div><p>The design of debugging tools is often <em>ad hoc</em>, with tools tailor-made for specific target languages and operating systems. Consequently, no unified theory of debugger design has emerged. Especially neglected is the design of languages to control debugging activities—and fundamental issues that arise in the implementation and use of such languages. We introduce GDL, a powerful low-level debugging language whose primitives capture the intuitive, informal semantics used in imperative debugging. GDL can be extended to incorporate higher-level constructs, hence we use it as our vehicle to examine central semantic issues that confront designers and implementors of debugging languages.</p><p>We gauge the efficiency of various GDL constructs on typical architectures and highlight semantic issues arising from the integration of those mechanisms. Our exploration of semantic issues is intended to provide guidance for designers of debugging languages, to ensure all high-level language features can be mapped cleanly and efficiently onto underlying architectural hooks, without endangering the semantic integrity of those high-level constructs.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"21 1","pages":"Pages 17-37"},"PeriodicalIF":0.0,"publicationDate":"1995-04-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/0096-0551(94)00015-I","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"91603567","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}
Pub Date : 1994-11-01DOI: 10.1016/0096-0551(94)90005-1
Teodor Rus, Tom Halverson
A language space provides a unified framework to deal with the properties of language constructs by associating them with their specification rules. The concrete syntax is represented by segments of the language space. The semantics is given by derived operations of the algebras where these constructs are interpreted by the processing tools operating on the language space. We examine in this paper only processing tools that collect syntactic information over the language space. Tools involved in semantics processing such as translators and interpreters are also integrated in the language space but are not discussed here.
{"title":"Algebraic tools for language processing","authors":"Teodor Rus, Tom Halverson","doi":"10.1016/0096-0551(94)90005-1","DOIUrl":"10.1016/0096-0551(94)90005-1","url":null,"abstract":"<div><p>A language space provides a unified framework to deal with the properties of language constructs by associating them with their specification rules. The concrete syntax is represented by segments of the language space. The semantics is given by derived operations of the algebras where these constructs are interpreted by the processing tools operating on the language space. We examine in this paper only processing tools that collect syntactic information over the language space. Tools involved in semantics processing such as translators and interpreters are also integrated in the language space but are not discussed here.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"20 4","pages":"Pages 213-238"},"PeriodicalIF":0.0,"publicationDate":"1994-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/0096-0551(94)90005-1","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"81551760","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}
Pub Date : 1994-11-01DOI: 10.1016/0096-0551(94)90008-6
B. Pradeep , C. Siva Ram Murthy
In this paper we present an O(log n) time parallel algorithm for arithmetic expression evaluation, on an n × n processor array with reconfigurable bus system, where n is the sum of the number of operators and constants in the expression. The basic technique involved here is leaves-cutting (rake operation), as in the case of PRAM model algorithms available in the literature for this problem. The input to our algorithm is assumed to be the binary tree associated with a given expression (also known as expression tree with n number of nodes). Our algorithm is faster compared to the previous best time for expression evaluation on mesh connected computers which is O(√n).
{"title":"Parallel arithmetic expression evaluation on reconfigurable meshes","authors":"B. Pradeep , C. Siva Ram Murthy","doi":"10.1016/0096-0551(94)90008-6","DOIUrl":"10.1016/0096-0551(94)90008-6","url":null,"abstract":"<div><p>In this paper we present an <em>O</em>(log <em>n</em>) time parallel algorithm for arithmetic expression evaluation, on an <em>n</em> × <em>n</em> processor array with reconfigurable bus system, where <em>n</em> is the sum of the number of operators and constants in the expression. The basic technique involved here is leaves-cutting (rake operation), as in the case of PRAM model algorithms available in the literature for this problem. The input to our algorithm is assumed to be the binary tree associated with a given expression (also known as expression tree with <em>n</em> number of nodes). Our algorithm is faster compared to the previous best time for expression evaluation on mesh connected computers which is <em>O</em>(√<em>n</em>).</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"20 4","pages":"Pages 267-277"},"PeriodicalIF":0.0,"publicationDate":"1994-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/0096-0551(94)90008-6","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"87129127","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}
Pub Date : 1994-11-01DOI: 10.1016/0096-0551(94)90006-X
J.A. Dain
We present a method for recovering from syntax errors encountered during parsing. The method provides a form of minimum distance repair, has linear time complexity, and is completely automatic. A formal method is presented for evaluating the performance of error recovery methods, based on global minimum-distance error correction. The minimum-distance error recovery method achieves a theoretically best performance on 80% of Pascal programs in the weighted Ripley-Druseikis collection. Comparisons of performance with other error recovery methods are given.
{"title":"A practical minimum distance method for syntax error handling","authors":"J.A. Dain","doi":"10.1016/0096-0551(94)90006-X","DOIUrl":"10.1016/0096-0551(94)90006-X","url":null,"abstract":"<div><p>We present a method for recovering from syntax errors encountered during parsing. The method provides a form of minimum distance repair, has linear time complexity, and is completely automatic. A formal method is presented for evaluating the performance of error recovery methods, based on global minimum-distance error correction. The minimum-distance error recovery method achieves a theoretically best performance on 80% of Pascal programs in the weighted Ripley-Druseikis collection. Comparisons of performance with other error recovery methods are given.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"20 4","pages":"Pages 239-252"},"PeriodicalIF":0.0,"publicationDate":"1994-11-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/0096-0551(94)90006-X","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"84077019","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}