3 research outputs found

    Detecting errors in software using a parameter checker: An Analysis

    Get PDF
    This paper will discuss a study of parameter errors that occurred in a software product developed using the C language. Through the use of a parameter checker that was developed from an existing compiler, the frequency and type of parameter errors over several releases of an application are studied. In addition to parameter checking, other static analysis data was collected concerning function usage (or non-usage) and function return value comparisons. This paper may serve as a useful complement to previous static analyses done for the FORTRA, COBOL and Pascal languages. The study presents statistics that show the large number of parameter errors caused by the weak type-checking of the C language. This paper also discusses the cost associated with detecting and repairing parameter errors that might otherwise have been detected by static analysis methods. In summing up the presence of these parameter errors the author discusses the impact of the ANSI C standard on this issue. The code used to build the data analysis portion of the Parameter Checker is presented in the appendices

    Abstract machine design for increasingly more powerful ALGOL-languages

    Get PDF
    This thesis presents the work and results of an investigation into language implementation. Some work on language design has also been undertaken. Three languages have been implemented which may be described as members of the Algol family with features and constructs typical of that family. These include block structure, nested routines, variables, and dynamic allocation of data structures such as vectors and user-defined structures. The underlying technique behind these Implementations has been that of abstract machine modelling. For each language an abstract intermediate code has been designed. Unlike other such codes we have raised the level of abstraction so that the code lies closer to the language than that of the real machine on which the language may be implemented. Each successive language is more powerful than the previous by the addition of constructs which were felt to be useful. These were routines as assignable values, dynamically initialised constant locations, types as assignable values and lists. The three languages were, Algol R a "typical" Algol based on Algol W h an Algol with routines as assignable values, enumerated types, restriction of pointers to sets of user-defined structures, and constant locations. nsl a polymorphic Algol with types as assignable values, routines as assignable values, lists, and type- and value-constant locations. The intermediate code for Algol R was based on an existing abstract machine. The code level was raised and designed so that it should be used as the input to a code generator. Such a code generator was written improving a technique called simulated evaluation. The language h was designed and a recursive descent compiler written for it which produced an intermediate code similar in level to the previous one. Again a simulated evaluation code generator was written, this time generating code for an interpreted abstract machine which implemented routines as assignable and storable values. Finally the language nsl was designed. The compiler for it produced code for an orthogonal, very high level tagged architecture abstract machine which was implemented by interpretation. This machine implemented polymorphism, assignable routine values and type- and value- constancy. Descriptions of the intermediate codes/abstract machines are given in appendices
    corecore