Kurzreferenz

Parsimmon Parser-Combinator Spickzettel

Schnellreferenz für Parsimmon: Parser-Combinator-Bibliothek für JavaScript, atomare Parser, Sequenzierung, Alternativen und Mapping.

· Veröffentlicht

Parsimmon ist eine kleine, elegante Parser-Combinator-Bibliothek für JavaScript und Node.js.

Grundlegendes Beispiel

const P = require('parsimmon');

// Parser erstellen, der Kleinbuchstaben matcht
const word = P.regexp(/[a-z]+/);

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

Atomare Parser

P.string('function');   // Exaktes String-Literal
P.regexp(/[0-9]+/);     // Regulärer Ausdruck
P.oneOf('abc');         // Einzelnes Zeichen aus 'a', 'b' oder 'c'
P.whitespace;           // Ein oder mehrere Whitespace-Zeichen
P.optWhitespace;        // Null oder mehr Whitespace-Zeichen
P.eof;                  // Ende des Eingabestroms

Kombinatoren

// Sequenz: Matcht alle Parser in exakter Reihenfolge
P.seq(P.string('('), P.number, P.string(')'));

// Alternativen: Matcht den ersten erfolgreichen Parser
P.alt(P.string('true'), P.string('false'));
// oder mit .or():
a.or(b);

// Durch Trennzeichen separierte Listen
P.sepBy(P.number, P.string(','));  // Kommagetrennte Zahlen (0 oder mehr)
P.sepBy1(P.number, P.string(',')); // Kommagetrennte Zahlen (mindestens 1)

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

// Tokens verwerfen
a.skip(P.string(';')); // Parst 'a', matcht ';', gibt nur 'a' zurück

Ausgabe transformieren (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');

Referenzen

Verwandte Themen