Γρήγορη αναφορά

Parsimmon Parser Combinator Σημειώσεις

Γρήγορος οδηγός αναφοράς για το Parsimmon: βιβλιοθήκη parser combinator για JavaScript, ατομικοί αναλυτές, αλληλουχία και μετασχηματισμοί.

· Δημοσιεύτηκε

Το Parsimmon είναι μια κομψή βιβλιοθήκη συνδυαστών αναλυτών (parser combinator) για JavaScript και Node.js.

Βασικό Παράδειγμα

const P = require('parsimmon');

// Δημιουργία αναλυτή για πεζά γράμματα
const word = P.regexp(/[a-z]+/);

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

Ατομικοί Αναλυτές (Atomic Parsers)

P.string('function');   // Ακριβές λεκτικό συμβολοσειράς
P.regexp(/[0-9]+/);     // Ταίριασμα κανονικής έκφρασης
P.oneOf('abc');         // Ένας χαρακτήρας από 'a', 'b' ή 'c'
P.whitespace;           // Ένας ή περισσότεροι χαρακτήρες κενού
P.optWhitespace;        // Μηδέν ή περισσότεροι χαρακτήρες κενού
P.eof;                  // Τέλος ροής εισόδου

Συνδυαστές (Combinators)

// Ακολουθία: ταιριάζει όλους τους αναλυτές με ακριβή σειρά
P.seq(P.string('('), P.number, P.string(')'));

// Εναλλακτικές: ταιριάζει τον πρώτο επιτυχημένο αναλυτή
P.alt(P.string('true'), P.string('false'));
// ή χρησιμοποιώντας .or():
a.or(b);

// Λίστες με διαχωριστικά
P.sepBy(P.number, P.string(','));  // Αριθμοί χωρισμένοι με κόμμα (μηδέν ή περισσότεροι)
P.sepBy1(P.number, P.string(',')); // Αριθμοί χωρισμένοι με κόμμα (τουλάχιστον ένας)

// Επανάληψη
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

// Απόρριψη διακριτικών
a.skip(P.string(';')); // Αναλύει το 'a', ταιριάζει το ';', επιστρέφει μόνο το 'a'

Μετασχηματισμός Εξόδου (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');

Αναφορές

Σχετικά θέματα