Hash :
dcf1901d
Author :
Thomas de Grivel
Date :
2025-05-18T15:50:10
translated doc guides to French
KC3 est implémenté via libkc3, une petite bibliothèque C99 qui contient
le cœur du langage.
La bibliothèque comprend un analyseur syntaxique (parser) et un interpréteur pour le code KC3 sous forme de structures C.
Le support des grands entiers est assuré par libtommath.
Le support des appels de fonctions C est fourni par libffi.
Les modules sont enregistrés sous forme de bases de faits.
L’analyseur est de type “descente récursive”.
L’AST (arbre de syntaxe abstraite) est représenté sous forme de structures de données KC3 et peut être manipulé en méta-programmation en C.
Veuillez consulter les fonctions suivantes dans libkc3/env.c :
env_eval_tag : évalue un tag (n’importe quel type KC3) env_eval_block : évalue un bloc (do ... end) env_eval_call : évalue un appel de fonction (Cfn, Fn) env_eval_call_fn_args : évalue un appel de fonction KC3 (Fn) Shell interactif. Les entrées/sorties terminal sont assurées par linenoise.
Exemple :
$ make test
$ ikc3/ikc3
ikc3> 1 + 1
2
ikc3> 2 + 2
4
ikc3> 3 + 3
6
ikc3> 1 +
ikc3> 1
2
ikc3> double = fn (x) { x * 2 }
fn (x) { x * 2 }
ikc3> double
fn (x) { x * 2 }
ikc3> double(1)
2
ikc3> double(2)
4
ikc3> double(3)
6
ikc3> double(4)
8
ikc3> List.map([1, 2, 3, 4], double)
[2, 4, 6, 8]
ikc3> List.reverse(List.map([1, 2, 3, 4], double))
[8, 6, 4, 2]
Les fonctions List.map et List.reverse sont définies dans
lib/kc3/0.1/list.kc3 et peuvent être modifiées à la volée.
Par exemple, sans quitter ikc3, redéfinissez List.reverse :
ouvrez un éditeur et remplacez cette ligne dans lib/kc3/0.1/list.kc3 :
def reverse = fn {
(x) { reverse(x, ()) }
([], acc) { acc }
([a | b], acc) { reverse(b, [a | acc]) }
}
par :
def reverse = fn {
(x) { reverse(x, ()) }
([], acc) { [:reversed | acc] }
([a | b], acc) { reverse(b, [a | acc]) }
}
Puis vérifiez le résultat dans ikc3 (touche flèche haut pour réexécuter) :
ikc3> List.reverse(List.map([1, 2, 3, 4], double))
[:reversed, 8, 6, 4, 2]
N’oubliez pas de rétablir les modifications dans list.kc3.
Interpréteur de scripts. Fonctionne comme ikc3, mais sans mode interactif
et sans affichage des résultats.
Le démon HTTP peut être lancé avec make test_httpd.
Il est défini dans httpd/httpd.c et lib/kc3/0.1/httpd.kc3.
Il agit à la fois comme serveur de fichiers statiques (Web 1.0),
et comme framework MVC chargeant des fichiers KC3 depuis ./app.
Le routeur est défini dans ./conf/router.kc3.
Top : Guides KC3
Précédent : Guide d’utilisation
Suivant : Tutoriel KC3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
## Guide de la structure de KC3
### libkc3
KC3 est implémenté via `libkc3`, une petite bibliothèque C99 qui contient
le cœur du langage.
La bibliothèque comprend un analyseur syntaxique (parser) et un
interpréteur pour le code KC3 sous forme de structures C.
Le support des grands entiers est assuré par
[libtommath](https://github.com/libtom/libtommath).
Le support des appels de fonctions C est fourni par
[libffi](https://github.com/libffi/libffi).
Les modules sont enregistrés sous forme de bases de faits.
#### Analyseur syntaxique (Parser)
L’analyseur est de type "descente récursive".
#### AST
L’AST (arbre de syntaxe abstraite) est représenté sous forme de
structures de données KC3 et peut être manipulé en méta-programmation
en C.
#### Interpréteur
Veuillez consulter les fonctions suivantes dans `libkc3/env.c` :
- `env_eval_tag` : évalue un tag (n’importe quel type KC3)
- `env_eval_block` : évalue un bloc (`do ... end`)
- `env_eval_call` : évalue un appel de fonction (`Cfn`, `Fn`)
- `env_eval_call_fn_args` : évalue un appel de fonction KC3 (`Fn`)
### ikc3
Shell interactif. Les entrées/sorties terminal sont assurées par
[linenoise](https://github.com/antirez/linenoise/tree/1.0).
Exemple :
```sh
$ make test
$ ikc3/ikc3
```
```elixir
ikc3> 1 + 1
2
ikc3> 2 + 2
4
ikc3> 3 + 3
6
ikc3> 1 +
ikc3> 1
2
ikc3> double = fn (x) { x * 2 }
fn (x) { x * 2 }
ikc3> double
fn (x) { x * 2 }
ikc3> double(1)
2
ikc3> double(2)
4
ikc3> double(3)
6
ikc3> double(4)
8
ikc3> List.map([1, 2, 3, 4], double)
[2, 4, 6, 8]
ikc3> List.reverse(List.map([1, 2, 3, 4], double))
[8, 6, 4, 2]
```
### Chemin des bibliothèques
Les fonctions `List.map` et `List.reverse` sont définies dans
`lib/kc3/0.1/list.kc3` et peuvent être modifiées à la volée.
Par exemple, sans quitter `ikc3`, redéfinissez `List.reverse` :
ouvrez un éditeur et remplacez cette ligne dans `lib/kc3/0.1/list.kc3` :
```elixir
def reverse = fn {
(x) { reverse(x, ()) }
([], acc) { acc }
([a | b], acc) { reverse(b, [a | acc]) }
}
```
par :
```elixir
def reverse = fn {
(x) { reverse(x, ()) }
([], acc) { [:reversed | acc] }
([a | b], acc) { reverse(b, [a | acc]) }
}
```
Puis vérifiez le résultat dans `ikc3` (touche flèche haut pour réexécuter) :
```elixir
ikc3> List.reverse(List.map([1, 2, 3, 4], double))
[:reversed, 8, 6, 4, 2]
```
N'oubliez pas de rétablir les modifications dans `list.kc3`.
---
### kc3s
Interpréteur de scripts. Fonctionne comme `ikc3`, mais sans mode interactif
et sans affichage des résultats.
---
### HTTPd
Le démon HTTP peut être lancé avec `make test_httpd`.
Il est défini dans `httpd/httpd.c` et `lib/kc3/0.1/httpd.kc3`.
Il agit à la fois comme serveur de fichiers statiques (Web 1.0),
et comme framework MVC chargeant des fichiers KC3 depuis `./app`.
Le routeur est défini dans `./conf/router.kc3`.
---
Top : [Guides KC3](./)
Précédent : [Guide d'utilisation](3.3_Usage)
Suivant : [Tutoriel KC3](3.5_Tutorial)