مرجع سريع

ورقة غش مجمع المحللات Parsimmon

دليل مرجعي سريع لمكتبة Parsimmon: مجمعات التحليل اللغوي في جافا سكريبت، المحللات الذرية، التسلسل، البدائل، الفواصل، والتحويل.

· تاريخ النشر

Parsimmon هي مكتبة مجمعات تحليل لغوي (Parser Combinator) صغيرة وأنيقة لجافا سكريبت وبيئة 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]+/);     // مطابقة عبر التعبيرات النمطية Regular Expression
P.oneOf('abc');         // حرف واحد يطابق أي من "a" أو "b" أو "c"
P.whitespace;           // مسافة بيضاء واحدة أو أكثر
P.optWhitespace;        // صفر أو أكثر من المسافات البيضاء
P.eof;                  // نهاية دفق الإدخال (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');

مراجع مفيدة

موضوعات ذات صلة