Étendre l'interpréteur lui-même
Ajouter une nouvelle fonction native (le changement le plus courant) : choisis le bon registerBuiltin*() dans src/Interpreter.cpp (ou defineNatives() pour quelque chose qui doit toujours être disponible, sans IMPORT://), et ajoute un appel def("nom", [...](std::vector<Value>& args) -> Value { ... }). Regarde une fonction voisine pour la convention de vérification d'arguments (lève std::runtime_error avec un message clair sur le mauvais type/nombre). Documente-la ensuite dans ce fichier, et — si c'est du calcul pur sans accès système de fichiers/réseau/processus — envisage de la porter aussi dans exemples/ton618-lite.js, pour que le playground du navigateur reste synchronisé (voir le commentaire d'en-tête de ce fichier pour ce qu'il peut et ne peut pas prendre en charge).
Ajouter un nouvel opérateur ou mot-clé : ajoute un TokenType (Token.hpp), apprends au Lexer à le produire (src/Lexer.cpp — la map keywords pour un mot, scanToken() pour de la ponctuation), puis apprends au Parser à le consommer au bon niveau de précédence (voir le commentaire de Parser.hpp sur la chaîne expression -> assignment -> ternary -> ...) et à l'Interpreter à l'évaluer.
Ajouter un nouveau type d'instruction (comme switch l'a été) : ajoute un StmtType dans Ast.hpp (en réutilisant les champs existants là où ça convient, plutôt que de faire grossir la struct), une méthode de parsing dans Parser.cpp appelée depuis statement(), et un case dans Interpreter::execute().
Ajouter un nouveau type de valeur (par ex. un ton.set) :
- Ajoute un
ValueTypeet un champ de stockage dansinclude/Value.hpp; étendstypeName(),toString(),toJson(). - Ajoute un
VarKinddansinclude/Ast.hppet unTokenType/mot-clé (Token.hpp,Lexer.cpp) s'il a besoin de sa propre syntaxe de déclarationton.<type>. - Étends
Interpreter::checkType(src/Interpreter.cpp) pour queton.<type> x = ...l'impose. - Ajoute la syntaxe littérale dans
Parser::primary()si le type en a besoin (regarde comment les littérauxARRAY/DICTy sont parsés), et le support d'évaluation dansInterpreter::evaluate.
Après tout changement, lance make et vérifie avec les scripts de exemples/ (en particulier exemples/test_new_features.ton) avant de te fier au changement.