This innovative volume provides a hands-on introduction to techniques for specifying the behavior of software components. A text for a second-year undergraduate course in Computer Science and Computer Engineering programs, it is also suitable for self-study. This book will help students to improve their programming skills and gain a sound foundation and motivation for subsequent courses in advanced algorithms and data structures, software design, formal methods, compilers, programming languages, and theory. The main topics covered are techniques for using programmer-friendly assertional notations to specify, develop, and verify small but non-trivial algorithms and data representations, and the use of state diagrams, grammars, and regular expressions to specify and develop recognizers for formal languages. The presentation is based on numerous examples and case studies appropriate to the level of programming expertise of the intended readership.
Contents
Introduction; Part I. Algorithms: 1. Specifying algorithms; 2. Verifying algorithms: basic techniques; 3. Verifying algorithms: some examples; 4. Additional verification techniques; Part II. Data Representations: 5. Data representation: a case study; 6. Data representation: additional examples; Part III. Language Recognizers: 7. Basic concepts; 8. State-transition diagrams; 9. Regular languages; 10. Context-free languages; 11. Parsing; 12. A taste of computability theory; Appendix A: programming language reference; Appendix B: hints for selected exercises; Index.
Review
"I would like to single out both the author's approach and his style of presentation as very positive features of the book. Reading this book is definitely inspiring..." Computing Reviews

