Noweb Explained

Author:Norman Ramsey
Latest Release Version:2.12
Latest Release Date:[1]
Programming Language:C, AWK, and Icon
Operating System:Cross-platform
Language:English
Genre:Literate programming
License:BSD-2-Clause license

Noweb, stylised in lowercase as noweb, is a literate programming tool, created in 1989–1999 by Norman Ramsey, and designed to be simple, easily extensible and language independent.[2] [3]

As in WEB and CWEB, the main components of Noweb are two programs: "notangle", which extracts 'machine' source code from the source texts, and "noweave", which produces nicely-formatted printable documentation.

Noweb supports TeX, LaTeX, HTML, and troff back ends and works with any programming language. Besides simplicity this is the main advantage over WEB, which needs different versions to support programming languages other than Pascal. (Thus the necessity of CWEB, which supports C and similar languages.)

Noweb's input

A Noweb input text contains program source code interleaved with documentation. It consists of so-called chunks that are either documentation chunks or code chunks.

A documentation chunk begins with a line that starts with an at sign (@) followed by a space or newline. A documentation chunk has no name. Documentation chunks normally contain LaTeX, but Noweb is also used with HTML, plain TeX, and troff.

Code chunks are named. A code chunk begins with

<>=

on a line by itself. The double left angle bracket (<<) must be in the first column.

Each chunk is terminated by the beginning of another chunk. If the first line in the file does not mark the beginning of a chunk, it is assumed to be the first line of a documentation chunk.

Code chunks aren't treated specially by Noweb's tools—they may be placed in any order and, when needed, they are just concatenated. Chunk references in code are dereferenced and the whole requested source code is extracted.

Example of a simple Noweb program

This is an example of a "hello world" program with documentation:\section

Today I awoke and decided to writesome code, so I started to write Hello World in \textsf C.

<>=/* <>

  1. include

int main(int argc, char *argv[]) @\noindent \ldots then I did the same in PHP.

<>=> */ echo "Hello world!\n";?>@\sectionLater the same day some lawyer reminded me about licenses.So, here it is:

<>=This work is placed in the public domain.Assuming that the above code is placed in a file named 'hello.nw', the command to extract the human-readable document in HTML format is:

noweave -filter l2h -index -html hello.nw | htmltoc > hello.html

... and in LaTeX format:

noweave -index -latex hello.nw > hello.tex

To extract machine source code:

notangle -Rhello.c hello.nw > hello.c

notangle -Rhello.php hello.nw > hello.php

Compatibility

Noweb defines a specific file format and a file is likely to interleave three different formats (Noweb, LaTeX and the language used for the software). This is not recognised by other software development tools and consequently using Noweb excludes the use of UML or code documentation tools.

See also

External links

Notes and References

  1. Web site: Noweb home page . 24 April 2016 . 21 March 2018.
  2. Ramsey . N. . Literate programming simplified . IEEE Software . September 1994 . 11 . 5 . 97–105 . 10.1109/52.311070 . 18593796 . 3 December 2018.
  3. Johnson . Andrew L. . Johnson . Brad . Literate Programming Using Noweb Linux Journal . www.linuxjournal.com . October 1, 1997 . 3 December 2018 . en.