Noweb , estilizado en minúsculas como noweb , es una herramienta de programación alfabetizada , creada entre 1989 y 1999 por Norman Ramsey, [1] y diseñada para ser simple, fácilmente extensible e independiente del lenguaje. [2] [3]
Al igual que en WEB y CWEB , los componentes principales de Noweb son dos programas: " notangle ", que extrae el código fuente "de máquina" de los textos fuente, y " noweave ", que produce documentación imprimible con un formato agradable.
Noweb es compatible con TeX , LaTeX , HTML y troff y funciona con cualquier lenguaje de programación. Además de la simplicidad, esta es la principal ventaja sobre WEB , que necesita diferentes versiones para admitir lenguajes de programación distintos de Pascal . (De ahí la necesidad de CWEB , que admite C y lenguajes similares).
Un texto de entrada de Noweb contiene el código fuente del programa intercalado con documentación. Está formado por los denominados fragmentos , que pueden ser fragmentos de documentación o fragmentos de código .
Un fragmento de documentación comienza con una línea que empieza con un signo arroba (@) seguido de un espacio o una nueva línea. Un fragmento de documentación no tiene nombre. Los fragmentos de documentación normalmente contienen LaTeX, pero Noweb también se usa con HTML, TeX simple y troff.
Los fragmentos de código reciben un nombre. Un fragmento de código comienza con
<<nombre del fragmento>>=
en una línea por sí solo. El corchete angular izquierdo doble (<<) debe estar en la primera columna.
Cada fragmento termina con el comienzo de otro fragmento. Si la primera línea del archivo no marca el comienzo de un fragmento, se supone que es la primera línea de un fragmento de documentación.
Las herramientas de Noweb no tratan los fragmentos de código de forma especial: se pueden colocar en cualquier orden y, cuando es necesario, simplemente se concatenan. Las referencias a fragmentos de código se desreferencian y se extrae todo el código fuente solicitado.
Este es un ejemplo de un programa "hola mundo" con documentación:
\section { Hola mundo }Hoy me desperté y decidí escribir.Un poco de código, así que comencé a escribir Hola Mundo en \textsf C.<<hola.c>>=/* <<licencia>>*/#incluir <stdio.h>int main(int argc, char *argv[]) { printf("¡Hola mundo! \n "); devuelve 0;}@\noindent \ldots luego hice lo mismo en PHP.<<hola.php>>=<?php /* <<licencia>> */ echo "Hola mundo! \n ";?>@\sección { Licencia }Más tarde ese mismo día, un abogado me recordó lo de las licencias.Así que aquí está:<<licencia>>=Esta obra se coloca en el dominio público.
Suponiendo que el código anterior se coloca en un archivo llamado 'hello.nw', el comando para extraer el documento legible por humanos en formato HTML es:
ahora -filtro l2h -índice -html hola.nw | htmltoc > hola.html
...y en formato LaTeX :
ahora -índice -latex hola.nw > hola.tex
Para extraer el código fuente de la máquina:
notangle -Rhello.c hola.nw > hola.c
notangle -Rhello.php hola.nw > hola.php
Noweb define un formato de archivo específico y es probable que un archivo combine tres formatos diferentes (Noweb, LaTeX y el lenguaje utilizado para el software). Esto no es reconocido por otras herramientas de desarrollo de software y, en consecuencia, el uso de Noweb excluye el uso de herramientas de documentación de código o UML .