Treeia‑Token est la représentation symbolique de Treeia‑STS.
Il ne contient aucune sémantique métier et ne définit aucune structure par lui‑même.
Il est entièrement dérivé de :
- la librairie STRUCTS du fichier STS
- les tables TOKEN_STRUCTS, TOKEN_PARAMS, TOKEN_TYPES, TOKEN_CONST ajoutées au binaire
Treeia‑Token est donc :
- bijectif avec STS
- déterministe
- sans texte humain
- sans ponctuation
- sans ambiguïté
Aucun mot, aucune chaîne UTF‑8, aucune ponctuation.
Uniquement des tokens PUA (Private Use Area Unicode).
Toutes les valeurs multi‑octets (uint16, uint32, float32, etc.) sont encodées en little‑endian, conformément à STS.
Tous les tokens proviennent de tables STS :
TOKEN_STRUCTSTOKEN_PARAMSTOKEN_TYPESTOKEN_CONST
Aucun token n’est défini dans la spec elle‑même.
Les blocs utilisent :
BEGIN_BLOCK(PUA fixe)END_BLOCK(PUA fixe)
Pas de tailles explicites.
Le parsing est sans heuristique :
l’ordre des paramètres est dicté par STRUCTS.
- tokens courts
- grammaire fermée
- pas de choix syntaxique
- pas de ponctuation
- pas de texte libre
Pour permettre la génération automatique du Token, STS doit contenir 4 tables :
Associe un token PUA à chaque struct_id.
struct_id : uint16
token_code : uint32 // PUA
flags : uint16 // 0
Associe un token PUA à chaque paramètre d’une struct.
struct_id : uint16
param_index : uint16
token_code : uint32 // PUA
flags : uint16
Associe un token PUA à chaque opcode primitif STS.
opcode : uint8 // ex : 0x06 = float
token_code : uint32 // PUA
flags : uint16
Associe un token PUA à chaque constante prédéfinie STS.
const_id : uint16
token_code : uint32 // PUA
flags : uint16
Ces tokens ne dépendent pas de STS :
| Rôle | Token PUA |
|---|---|
| BEGIN_BLOCK | U+F400 |
| END_BLOCK | U+F401 |
| SYMBOL_DEF | U+F402 |
| SYMBOL_REF | U+F403 |
<file> ::= <symbol-def>* <script>
<symbol-def> ::= SYMBOL_DEF <symbol-id:uint16> <block>
<block> ::= BEGIN_BLOCK <instruction>* END_BLOCK
Une instruction peut être :
<instruction> ::= <struct-instance>
| <symbol-ref>
| <primitive-value>
<symbol-ref> ::= SYMBOL_REF <symbol-id:uint16>
<struct-instance> ::= <token-struct> <field>*
Où <token-struct> vient de TOKEN_STRUCTS.
<field> ::= <token-param> <value>
Où <token-param> vient de TOKEN_PARAMS.
<value> ::= <token-type> <raw-bytes>
| <token-const>
| <struct-instance>
| <block>
Supposons que STS contient :
struct_id = 1 name="Coord"
param0: float
param1: float
Et que les tables STS donnent :
TOKEN_STRUCTS:
struct 1 → U+E100
TOKEN_PARAMS:
(1,0) → U+E200
(1,1) → U+E201
TOKEN_TYPES:
float (0x06) → U+E300
Alors Treeia‑Token pour :
Coord(10.0, 20.0)
devient :
⟦E100⟧ // struct Coord
⟦E200⟧ ⟦E300⟧ 00 00 20 41 // param0 = float 10.0
⟦E201⟧ ⟦E300⟧ 00 00 A0 41 // param1 = float 20.0
Aucune sémantique.
Aucun mot.
Aucun concept métier.
100 % dérivable du binaire.
Token ↔ STS ↔ Token
Aucun choix syntaxique.
Tokens courts, grammaire fermée.
Aucune connaissance métier.
Ajout de nouvelles structs → nouveaux tokens dérivés automatiquement.
La présente section constitue la définition normative du langage Treeia‑Token. Toute implémentation conforme doit être capable de parser et de générer un flux respectant strictement cette grammaire.
; ============================
; Treeia‑Token v1.0 — BNF
; ============================
<file> ::= <symbol-def>* <script>
<script> ::= <instruction>*
; ----------------------------
; Symboles
; ----------------------------
<symbol-def> ::= SYMBOL_DEF <symbol-id> <block>
<symbol-id> ::= uint16
<symbol-ref> ::= SYMBOL_REF <symbol-id>
; ----------------------------
; Blocs
; ----------------------------
<block> ::= BEGIN_BLOCK <instruction>* END_BLOCK
; ----------------------------
; Instructions
; ----------------------------
<instruction> ::= <struct-instance>
| <symbol-ref>
| <primitive-value>
| <block>
; ----------------------------
; Structures dérivées de STS
; ----------------------------
<struct-instance> ::= <token-struct> <field>*
<token-struct> ::= PUA_STRUCT ; dérivé de TOKEN_STRUCTS
<field> ::= <token-param> <value>
<token-param> ::= PUA_PARAM ; dérivé de TOKEN_PARAMS
; ----------------------------
; Valeurs
; ----------------------------
<value> ::= <primitive-value>
| <token-const>
| <struct-instance>
| <block>
; ----------------------------
; Primitifs dérivés de STS
; ----------------------------
<primitive-value> ::= <token-type> <raw-bytes>
<token-type> ::= PUA_TYPE ; dérivé de TOKEN_TYPES
<raw-bytes> ::= byte* ; longueur dictée par le type
; ----------------------------
; Constantes prédéfinies
; ----------------------------
<token-const> ::= PUA_CONST ; dérivé de TOKEN_CONST
; ----------------------------
; Tokens réservés
; ----------------------------
BEGIN_BLOCK ::= U+F400
END_BLOCK ::= U+F401
SYMBOL_DEF ::= U+F402
SYMBOL_REF ::= U+F403
; ----------------------------
; Tokens dérivés de STS
; ----------------------------
PUA_STRUCT ::= U+E000–U+E3FF ; struct_id → token
PUA_PARAM ::= U+E400–U+E7FF ; (struct_id,param_index) → token
PUA_TYPE ::= U+E800–U+EBFF ; opcode primitif → token
PUA_CONST ::= U+EC00–U+EFFF ; const_predef → token