Referință rapidă

Ghid Rapid Parsimmon (Parser Combinator)

Ghid rapid pentru Parsimmon: bibliotecă de combinatori de parsere pentru JavaScript, parsere atomice, secvențe și transformări.

· Publicat

Parsimmon este o bibliotecă elegantă de combinatori de parsere pentru JavaScript și Node.js.

Exemplu de bază

const P = require('parsimmon');

// Creează un parser pentru litere mici
const word = P.regexp(/[a-z]+/);

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

Parsere atomice

P.string('function');   // Șir literal exact
P.regexp(/[0-9]+/);     // Potrivire expresie regulată
P.oneOf('abc');         // Un singur caracter din 'a', 'b' sau 'c'
P.whitespace;           // Unul sau mai multe spații albe
P.optWhitespace;        // Zero sau mai multe spații albe
P.eof;                  // Sfârșitul fluxului de intrare (EOF)

Combinatori

// Secvență: potrivește toate parserele în ordine exactă
P.seq(P.string('('), P.number, P.string(')'));

// Alternative: alege primul parser reușit
P.alt(P.string('true'), P.string('false'));
// sau folosind .or():
a.or(b);

// Liste delimitate
P.sepBy(P.number, P.string(','));  // Numere separate prin virgulă (zero sau mai multe)
P.sepBy1(P.number, P.string(',')); // Numere separate prin virgulă (cel puțin unul)

// Repetiție
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

// Eliminarea token-urilor
a.skip(P.string(';')); // Parsează 'a', potrivește ';', returnează doar 'a'

Transformarea rezultatului (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');

Referințe

Subiecte conexe