Pub Date : 1998-10-01DOI: 10.1016/S0096-0551(98)00009-5
P. Rondogiannis , M. Gergatsoulis , T. Panayiotopoulos
Temporal programming languages provide a powerful means for the description and implementation of dynamic systems. However, most temporal languages are based on linear time, a fact that renders them unsuitable for certain types of applications (such as expressing properties of non-deterministic programs). In this paper we introduce the new temporal logic programming language Cactus, which is based on a branching notion of time. In Cactus, the truth value of a predicate depends on a hidden time parameter which varies over a tree-like structure. As a result, Cactus can be used to express in a natural way non-deterministic computations or generally algorithms that involve the manipulation of tree data structures. Moreover, Cactus appears to be appropriate as the target language for compilers or program transformers. Cactus programs can be executed using BSLD-resolution, a proof procedure based on the notion of canonical temporal atoms/clauses.
{"title":"Branching-time logic programming: the language Cactus and its applications","authors":"P. Rondogiannis , M. Gergatsoulis , T. Panayiotopoulos","doi":"10.1016/S0096-0551(98)00009-5","DOIUrl":"10.1016/S0096-0551(98)00009-5","url":null,"abstract":"<div><p>Temporal programming languages provide a powerful means for the description and implementation of dynamic systems. However, most temporal languages are based on linear time, a fact that renders them unsuitable for certain types of applications (such as expressing properties of non-deterministic programs). In this paper we introduce the new temporal logic programming language <strong>Cactus</strong>, which is based on a branching notion of time. In Cactus, the truth value of a predicate depends on a hidden time parameter which varies over a tree-like structure. As a result, Cactus can be used to express in a natural way non-deterministic computations or generally algorithms that involve the manipulation of tree data structures. Moreover, Cactus appears to be appropriate as the target language for compilers or program transformers. Cactus programs can be executed using BSLD-resolution, a proof procedure based on the notion of canonical temporal atoms/clauses.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"24 3","pages":"Pages 155-178"},"PeriodicalIF":0.0,"publicationDate":"1998-10-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(98)00009-5","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"77413442","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 : 1998-07-01DOI: 10.1016/S0096-0551(98)00003-4
Owen Kaser , C.R. Ramakrishnan
For efficiency and ease of implementation, many compilers implicitly impose an “inlining policy” to restrict the conditions under which a procedure may be inlined. An inlining technique consists of an inlining policy and a strategy for choosing a sequence of inlining operations that is consistent with the policy. The effectiveness of an inlining technique is affected by the restrictiveness of the inlining policy as well as the effectiveness of the (heuristic) inlining strategy. The focus of this paper is on the comparison of inlining policies and techniques, and the notions of power and flexibility are introduced. As a major case study, we identify and compare policies based on the version of the inlined procedure that is used.
{"title":"Evaluating inlining techniques","authors":"Owen Kaser , C.R. Ramakrishnan","doi":"10.1016/S0096-0551(98)00003-4","DOIUrl":"10.1016/S0096-0551(98)00003-4","url":null,"abstract":"<div><p>For efficiency and ease of implementation, many compilers implicitly impose an “inlining policy” to restrict the conditions under which a procedure may be inlined. An inlining <em>technique</em> consists of an inlining policy and a <em>strategy</em> for choosing a sequence of inlining operations that is consistent with the policy. The effectiveness of an inlining technique is affected by the restrictiveness of the inlining policy as well as the effectiveness of the (heuristic) inlining strategy. The focus of this paper is on the comparison of inlining policies and techniques, and the notions of <em>power</em> and <em>flexibility</em> are introduced. As a major case study, we identify and compare policies based on the <em>version</em> of the inlined procedure that is used.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"24 2","pages":"Pages 55-72"},"PeriodicalIF":0.0,"publicationDate":"1998-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(98)00003-4","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"83379004","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 : 1998-07-01DOI: 10.1016/S0096-0551(98)00005-8
Muhammed Al-Mulhem , Shahid Ali
Visual programming languages (VPLs) have been proposed to simplify the task of programming and to make better use of human capabilities. Visual Occam (VISO) is a visual programming language for concurrent programming. It uses message passing for interprocess communication and processes are disjoint. The VISO language uses a modular approach to visual programming which simplifies the specification of programs. It has a graphical syntax based the language occam. The main emphasis in this paper is to provide formal semantics of VISO using process calculus. The semantics of all programming constructs and icons in VISO are given as well as a number of complete example programs and their translation in process calculus.
{"title":"Formal semantics of visual occam","authors":"Muhammed Al-Mulhem , Shahid Ali","doi":"10.1016/S0096-0551(98)00005-8","DOIUrl":"10.1016/S0096-0551(98)00005-8","url":null,"abstract":"<div><p>Visual programming languages (VPLs) have been proposed to simplify the task of programming and to make better use of human capabilities. Visual Occam (VISO) is a visual programming language for concurrent programming. It uses message passing for interprocess communication and processes are disjoint. The VISO language uses a modular approach to visual programming which simplifies the specification of programs. It has a graphical syntax based the language occam. The main emphasis in this paper is to provide formal semantics of VISO using process calculus. The semantics of all programming constructs and icons in VISO are given as well as a number of complete example programs and their translation in process calculus.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"24 2","pages":"Pages 99-113"},"PeriodicalIF":0.0,"publicationDate":"1998-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(98)00005-8","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"72534316","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 : 1998-07-01DOI: 10.1016/S0096-0551(97)00016-7
Pierpaolo Degano , Corrado Priami
A taxonomy of syntax error handling techniques used in LR parsers is presented. The methods are classified according to the major features they offer. In particular, we distinguish correcting and noncorrecting techniques. The goal of the former methods is to correct an error when detected and to restart the parser. Instead, noncorrecting techniques simply signal the presence of an error and continue the analysis without attempting any correction on the source program. A finer classification of correcting approaches is given according the amount of information that is gathered around the error by the recovery routine. We distinguish phrase level, global and local techniques. Also interactive methods are considered. We report an evaluation of some techniques based on quality of the corrections, language independence, flexibility and efficiency. Finally, a glossary of technical terms is also provided.
{"title":"LR techniques for handling syntax errors","authors":"Pierpaolo Degano , Corrado Priami","doi":"10.1016/S0096-0551(97)00016-7","DOIUrl":"10.1016/S0096-0551(97)00016-7","url":null,"abstract":"<div><p>A taxonomy of syntax error handling techniques used in LR parsers is presented. The methods are classified according to the major features they offer. In particular, we distinguish correcting and noncorrecting techniques. The goal of the former methods is to correct an error when detected and to restart the parser. Instead, noncorrecting techniques simply signal the presence of an error and continue the analysis without attempting any correction on the source program. A finer classification of correcting approaches is given according the amount of information that is gathered around the error by the recovery routine. We distinguish phrase level, global and local techniques. Also interactive methods are considered. We report an evaluation of some techniques based on quality of the corrections, language independence, flexibility and efficiency. Finally, a glossary of technical terms is also provided.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"24 2","pages":"Pages 73-98"},"PeriodicalIF":0.0,"publicationDate":"1998-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(97)00016-7","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"79586609","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 : 1998-04-01DOI: 10.1016/S0096-0551(98)00002-2
Christoph W. Kessler1
Generating schedules for expression DAGs that use a minimal number of registers is a classical NP-complete optimization problem. Up to now an exact solution could only be computed for small DAGs (with up to 20 nodes), using a trivial O(n!) enumeration algorithm. We present a new algorithm with worst-case complexity O(n22n) and very good average behavior. Applying a dynamic programming scheme and reordering techniques, our algorithm is able to defer the combinatorial explosion and to generate an optimal schedule not only for small DAGs but also for medium-sized ones with up to 50 nodes, a class that contains nearly all DAGs encountered in typical application programs. Experiments with randomly generated DAGs and large DAGs from real application programs confirm that the new algorithm generates optimal schedules quite fast. We extend our algorithm to cope with delay slots and multiple functional units, two common features of modern superscalar processors.
{"title":"Scheduling expression DAGs for minimal register need","authors":"Christoph W. Kessler1","doi":"10.1016/S0096-0551(98)00002-2","DOIUrl":"10.1016/S0096-0551(98)00002-2","url":null,"abstract":"<div><p>Generating schedules for expression DAGs that use a minimal number of registers is a classical NP-complete optimization problem. Up to now an exact solution could only be computed for small DAGs (with up to 20 nodes), using a trivial <em>O</em>(<em>n</em>!) enumeration algorithm. We present a new algorithm with worst-case complexity <em>O</em>(<em>n</em>2<sup>2<em>n</em></sup>) and very good average behavior. Applying a dynamic programming scheme and reordering techniques, our algorithm is able to defer the combinatorial explosion and to generate an <em>optimal</em> schedule not only for small DAGs but also for medium-sized ones with up to 50 nodes, a class that contains nearly all DAGs encountered in typical application programs. Experiments with randomly generated DAGs and large DAGs from real application programs confirm that the new algorithm generates optimal schedules quite fast. We extend our algorithm to cope with delay slots and multiple functional units, two common features of modern superscalar processors.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"24 1","pages":"Pages 33-53"},"PeriodicalIF":0.0,"publicationDate":"1998-04-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(98)00002-2","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"90284856","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 : 1998-04-01DOI: 10.1016/S0096-0551(97)00007-6
Daniel E. Cooke
SequenceL is a new computer language that provides declarative constructs for nonscalar processing. In SequenceL, a problem solver provides little in the way of iterative/recursive details in a problem solution. Instead, the problem solver describes the solution directly by specifying, via a metastructure, the data structures which will hold results useful in solving the problem. SequenceL is a small language (i.e., there are a small number of language constructs), and it is not domain dependent. This paper serves as a comprehensive introduction to SequenceL, which includes new results and language features.
{"title":"SequenceL provides a different way to view programming","authors":"Daniel E. Cooke","doi":"10.1016/S0096-0551(97)00007-6","DOIUrl":"10.1016/S0096-0551(97)00007-6","url":null,"abstract":"<div><p><em>SequenceL</em> is a new computer language that provides declarative constructs for nonscalar processing. In <em>SequenceL</em>, a problem solver provides little in the way of iterative/recursive details in a problem solution. Instead, the problem solver describes the solution directly by specifying, via a metastructure, the data structures which will hold results useful in solving the problem. <em>SequenceL</em> is a small language (i.e., there are a small number of language constructs), and it is not domain dependent. This paper serves as a comprehensive introduction to <em>SequenceL</em>, which includes new results and language features.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"24 1","pages":"Pages 1-32"},"PeriodicalIF":0.0,"publicationDate":"1998-04-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(97)00007-6","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"85252205","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 : 1997-07-01DOI: 10.1016/S0096-0551(97)00014-3
G. Falkman
We describe a program separation scheme based on the notions of form and content of an algorithm. The content of an algorithm consists of all local operations needed to compute the algorithm on the basis of a given definition. Separating an algorithm can thus be described as the process of finding definitions such that the algorithm is locally definable. The form of the algorithm then gives the global structure of the algorithm.
The scheme is given in a definitional context, and we show how this type of program separation can be used as a basis for definitional higher order programming.
{"title":"Program separation and definitional higher order programming","authors":"G. Falkman","doi":"10.1016/S0096-0551(97)00014-3","DOIUrl":"10.1016/S0096-0551(97)00014-3","url":null,"abstract":"<div><p>We describe a program separation scheme based on the notions of form and content of an algorithm. The content of an algorithm consists of all local operations needed to compute the algorithm on the basis of a given definition. Separating an algorithm can thus be described as the process of finding definitions such that the algorithm is locally definable. The form of the algorithm then gives the global structure of the algorithm.</p><p>The scheme is given in a definitional context, and we show how this type of program separation can be used as a basis for definitional higher order programming.</p></div>","PeriodicalId":100315,"journal":{"name":"Computer Languages","volume":"23 2","pages":"Pages 179-206"},"PeriodicalIF":0.0,"publicationDate":"1997-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"https://sci-hub-pdf.com/10.1016/S0096-0551(97)00014-3","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"85372696","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}