Riferimento rapido

Cheat Sheet Parsimmon (Parser Combinator)

Guida rapida a Parsimmon: libreria parser combinator per JavaScript, parser atomici, sequenze, alternative e trasformazioni.

· Pubblicato

Parsimmon è una libreria di parser combinator per JavaScript e Node.js elegante e minimale.

Esempio di base

const P = require('parsimmon');

// Crea un parser per lettere minuscole
const word = P.regexp(/[a-z]+/);

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

Parser atomici

P.string('function');   // Stringa letterale esatta
P.regexp(/[0-9]+/);     // Espressione regolare
P.oneOf('abc');         // Singolo carattere 'a', 'b' o 'c'
P.whitespace;           // Uno o più spazi bianchi
P.optWhitespace;        // Zero o più spazi bianchi
P.eof;                  // Fine dello stream di input (EOF)

Combinatori

// Sequenza: analizza in ordine esatto
P.seq(P.string('('), P.number, P.string(')'));

// Alternative: seleziona il primo parser riuscito
P.alt(P.string('true'), P.string('false'));
// o usando .or():
a.or(b);

// Liste con separatore
P.sepBy(P.number, P.string(','));  // Numeri separati da virgola (zero o più)
P.sepBy1(P.number, P.string(',')); // Numeri separati da virgola (almeno uno)

// Ripetizioni
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

// Scartare token
a.skip(P.string(';')); // Analizza 'a', matcha ';', restituisce solo 'a'

Trasformare l output (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');

Riferimenti

Argomenti correlati