Référence rapide

Aide-mémoire Parsimmon (Parser Combinators)

Guide de référence rapide pour Parsimmon : bibliothèque de combinateurs d analyseurs pour JavaScript, analyseurs atomiques et séquençage.

· Publié le

Parsimmon est une bibliothèque de combinateurs d analyseurs syntaxiques élégante pour JavaScript et Node.js.

Exemple de base

const P = require('parsimmon');

// Créer un analyseur correspondant à des minuscules
const word = P.regexp(/[a-z]+/);

const result = word.parse('hello');
// => { status: true, value: 'hello' }

Analyseurs atomiques

P.string('function');   // Littéral de chaîne exact
P.regexp(/[0-9]+/);     // Expression régulière
P.oneOf('abc');         // Caractère unique parmi 'a', 'b' ou 'c'
P.whitespace;           // Un ou plusieurs espaces blancs
P.optWhitespace;        // Zéro ou plusieurs espaces blancs
P.eof;                  // Fin de flux d entrée (EOF)

Combinateurs

// Séquence : correspond dans l ordre exact
P.seq(P.string('('), P.number, P.string(')'));

// Alternatives : correspond au premier analyseur réussi
P.alt(P.string('true'), P.string('false'));
// ou avec .or() :
a.or(b);

// Listes séparées par délimiteur
P.sepBy(P.number, P.string(','));  // Nombres séparés par virgules (zéro ou plus)
P.sepBy1(P.number, P.string(',')); // Nombres séparés par virgules (au moins un)

// Répétition
a.many();        // 0 or more
a.atLeast(1);    // 1 or more
a.times(3);      // Exactly 3 times
a.times(1, 4);   // Between 1 and 4 times

// Rejeter des jetons
a.skip(P.string(';')); // Analyse 'a', vérifie ';', ne renvoie que 'a'

Transformer la sortie (map)

const arithmeticExpr = P.seq(
  P.digits.map(Number),
  P.oneOf('+-*/').trim(P.optWhitespace),
  P.digits.map(Number)
).map(([left, operator, right]) => ({
  type: 'BinaryExpression',
  operator,
  left,
  right
}));

arithmeticExpr.parse('10 + 20');

Références

Sujets associés