La bibliothèque Pcf

Emploi simple

La bibliothèque est conçue pour un emploi le plus simple possible.

Utilisation avec ocaml

Utilisez commande « ocaml pcf.cmo ».

Vous pouvez alors construire des termes de PCF directement. Par exemple :

# open Pcf.S.Ast (* Syntaxe abstraite « standard » (d'ou le S) *)
;;
# open Pcf.Op (* Module de la définition des opérations --- Add ci-dessous *)
;;
# let t = Let ("x",Num 2,Op (Add,Var "x",Num 1))
;;
val t : Pcf.S.Ast.t = Let ("x", Num 2, Op (Add, Var "x", Num 1))

Mais tout l’intérêt de la bibliothèque est de pouvoir utiliser la syntaxe concrète de PCF vue en cours. On écrira donc plutôt :

# let t = Pcf.S.Reader.from_string "Let x = 2 In x+1"
;;
val t : Pcf.S.Ast.t = Let ("x", Num 2, Op (Add, Var "x", Num 1))

Utilisation avec ocamlc

Il faut compiler votre programme avec la commande « ocamlc pcf.cmo ». Par exemple, voici un petit programme ex.ml, qui lit un terme de PCF dans l’entrée standard et L’affiche dans la sortie standard.

open Pcf.S (* Pcf standard *)

let t = Reader.from_chan stdin

let
 () = Ast.print stdout t ; print_newline ()

On compile par :

% ocamlc pcf.cmo -o ex ex.ml

Et avec l’entrée fact.txt, on obtient :

% ./ex < fact.txt 
Let fact = Fix f -> Fun n -> Ifz n Then 1 Else n*(f (n-1)) In fact 5

On peut d’ailleurs noter au passage que l’on a le même résultat sans compiler ainsi :

% ocaml pcf.cmo ex.ml < fact.txt 
Let fact = Fix f -> Fun n -> Ifz n Then 1 Else n*(f (n-1)) In fact 5

Utilisation avancée

Télécharger l’archive pcf.tar.gz des sources de la bibliothèque. Les sources contiennent un fichier README qui explique comment compiler et installer la bibliothèque.

Voyez aussi les deux exemples suivants intermain.ml et intertop.ml qui sont deux interpréteurs par valeur, le premier lisant l’entrée standard et le second offrant une boucle d’interaction. On pourra ainsi avoir :

% ocaml pcf.cmo intertop.ml
PCF> Let fact = Fix f -> Fun n -> Ifz n Then 1 Else n*(f (n-1))
;;
 val fact = <fun>
PCF> fact 3;;
 - = 6
PCF> fact 10;;
 - = 3628800

Ce document a été traduit de LATEX par HEVEA