Results 11 
14 of
14
Mixing Induction and Coinduction
, 2009
"... Purely inductive definitions give rise to treeshaped values where all branches have finite depth, and purely coinductive definitions give rise to values where all branches are potentially infinite. If this is too restrictive, then an alternative is to use mixed induction and coinduction. This techn ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
Purely inductive definitions give rise to treeshaped values where all branches have finite depth, and purely coinductive definitions give rise to values where all branches are potentially infinite. If this is too restrictive, then an alternative is to use mixed induction and coinduction. This technique appears to be fairly unknown. The aim of this paper is to make the technique more widely known, and to present several new applications of it, including a parser combinator library which guarantees termination of parsing, and a method for combining coinductively defined inference systems with rules like transitivity. The developments presented in the paper have been formalised and checked in Agda, a dependently typed programming language and proof assistant.
The PRECC Compiler Compiler
 in Proceedings of the UKUUG/SUKUG Joint New Year 1993 Conference
, 1993
"... PRECC is a UNIX utility that has been designed to extend the capabilities of the familiar LEX and YACC frontend design and implementation tools. The utility is a compilercompiler that takes unlimited lookahead and backtracking, the extended BNF notation, and parametrized grammars with (higher ord ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
PRECC is a UNIX utility that has been designed to extend the capabilities of the familiar LEX and YACC frontend design and implementation tools. The utility is a compilercompiler that takes unlimited lookahead and backtracking, the extended BNF notation, and parametrized grammars with (higher order) metaparameters to the world of C programming. The generated code is standard ANSI C and is `plug compatible' with LEXgenerated lexical analysers prepared for YACC. In contrast to YACC, however, the generated code is modular and thus allows parts of scripts to be compiled separately and linked in incrementally. But it remains efficient in practice, and the generated code has run as fast or faster than YACCgenerated code in trials with real programming language specifications.
Structurally Recursive Descent Parsing (Draft)
, 2008
"... Recursive descent parsing does not terminate for left recursive grammars. We turn recursive descent parsing into structurally recursive descent parsing, acceptable by total dependently typed languages like Agda, by using the type system to rule out left recursion. The resulting library retains much ..."
Abstract

Cited by 1 (0 self)
 Add to MetaCart
Recursive descent parsing does not terminate for left recursive grammars. We turn recursive descent parsing into structurally recursive descent parsing, acceptable by total dependently typed languages like Agda, by using the type system to rule out left recursion. The resulting library retains much of the flavour of ordinary “list of successes ” combinator parsers. In particular, the type indices used to rule out left recursion can in many cases be inferred automatically, so that
Introduction to Functional Programming using Gofer
, 1990
"... ing out and studying those patterns of computation as useful objects in their own right leads to further insights into the nature of computation. The list operators studied later in these notes follow this approach. ffl Functional programs are usually an order of magnitude more concise than their i ..."
Abstract
 Add to MetaCart
ing out and studying those patterns of computation as useful objects in their own right leads to further insights into the nature of computation. The list operators studied later in these notes follow this approach. ffl Functional programs are usually an order of magnitude more concise than their imperative counterparts. Besides being shorter, they can be much more readable. The functional community like to cite studies that show the number of bugs per line is more or less constant, independent of the level of the language in use. Higherlevel languages encode more concept per line, and therefore have relatively fewer bugs. ffl Functional programs are often more akin to formal specifications than their conventional counterparts. A good notation goes a long way towards solving the problem[47]. ffl Lazy evaluation permits a new approach to some algorithms. It is a simple but powerful idea that can remove the need for explicit backtracking, and can allow the programmer to manipulate in...