Tiramisu Docs

Vue d'ensemble de l'AST

Explorez les types de nœuds de l'arbre syntaxique abstrait produit par le parseur Tiramisu.

Le parseur Tiramisu (@timeleap/tiramisu) prend du texte source et produit un arbre syntaxique abstrait (AST). L'AST est un arbre de nœuds typés qui représente la structure de votre document.

Types de nœuds

L'AST est composé des types de nœuds suivants :

NœudDescription
TiramisuNœud racine du document. Contient tous les nœuds de premier niveau.
ParagraphUn paragraphe de texte. Créé par la séparation par ligne vide.
MixedTextDu texte qui contient à la fois du texte brut et des appels de fonctions.
PureTextUn segment de texte brut sans appels de fonctions.
FunctionCallUn appel de fonction avec un nom et des paramètres.
ParametersLa liste des paramètres d'un appel de fonction.
ParameterUn seul paramètre positionnel.
NamedParameterUn paramètre nommé (key = value).
ArrayValueUne valeur de type tableau ([a, b, c]).
ArrayItemUn seul élément dans un tableau.

Exemple

Étant donné ce source Tiramisu :

tiramisu
bold { Hello } world

Le parseur produit cet AST :

typescript
Tiramisu
└── Paragraph
    └── MixedText
        ├── FunctionCall (name: "bold")
        │   └── Parameters
        │       └── Parameter
        │           └── PureText ("Hello")
        └── PureText (" world")

Structure de FunctionCall

Le nœud FunctionCall est le cœur de Tiramisu. Il possède :

  • functionName — le nom de la fonction (texte avant le {)
  • parameters — un nœud Parameters contenant les arguments de la fonction

Les paramètres contiennent une liste de nœuds Parameter et NamedParameter. Chaque paramètre peut contenir du texte, des appels de fonctions imbriqués, ou des tableaux.

Importer les types de nœuds

Tous les types de nœuds sont disponibles depuis le package du parseur :

typescript
import {
  Tiramisu,
  Paragraph,
  MixedText,
  PureText,
  FunctionCall,
  Parameters,
  Parameter,
  NamedParameter,
  ArrayValue,
  ArrayItem,
} from "@timeleap/tiramisu/src/types/nodes";

La vérification du type de nœud utilise instanceof :

typescript
if (node instanceof FunctionCall) {
  console.log(node.functionName);
}