is a compiler generator, which takes an attributed grammar of a source language
and generates a scanner and a parser for this language. The scanner works as a
deterministic finite automaton. The parser uses recursive descent. LL(1)
conflicts can be resolved by a multi-symbol lookahead or by semantic checks.
Thus the class of accepted grammars is LL(k) for an arbitrary k.
There are different versions of Coco/R for Java, C#, C++,
Delphi, Modula-2, Oberon and other languages.
can be used not only to write proper compilers, but also to build many kinds of
tools that process structured input data. Various people have used Coco/R for
the following applications:
is therefore more than a Compiler generator and has been very popular among
Compiler programmers around the world. Unfortunately there was no proper
programming environment available. Programming in
using a text editor without Syntax highlighting and without features to invoke
the real compilation was very inconvenient. So I decided to design and
implement such an Environment for
Coco. It would have been a lot of work to
write a complete IDE, so I decided to take the existing developing Environment
Eclipse and write a plug-in to support
An analyzer for the static complexity of programs. The analyzer
evaluates the kind of operators and statements, the nesting of statements and
expressions as well as the use of local and global variables to obtain a
measure of the program complexity and an indication if the program is well
A cross reference generator which lists all occurrences of the
objects in a program according to their scope together with information where
the objects have been assigned a value and where they have been referenced.
An pretty printer which uses the structure and the length of
statements for proper indentation.
A program which generates an index for books and reports. The index
is generated from a little language that describes page numbers and the
keywords occurring on those pages.
The front end of a syntax oriented editor. A program is translated
into a tree representation which is the internal data structure of the editor.
A program that builds a repository of symbols and their relations in
a program. The repository is accessed by a case tool.
A profiler that inserts counters and timers into the source code of
a program and evaluates them after the program has been run.
A white-box test tool that inserts counters into the source code of
a program to find out which paths of the programs have been executed.