سؤال

يحرر:علمت مؤخرا عن مشروع يسمى CommonMark ، والذي يحدد بشكل صحيح ويتعامل مع الغموض في الأصل مواصفات تخفيض السعر. http://commonmark.org/ لديها مكتبة C # كبيرة دعم.

يمكنك العثور على بناء الجملة هنا.

المصدر الذي يتبع التنزيل مكتوب بيرل, ، والذي ليس لدي أي نية لتكريمه.إنها مليئة بالتعبيرات العادية، وتعتمد عليها MD5 التجزئة للهروب من بعض الشخصيات.هناك خطأ ما في ذلك!

أنا على وشك أن أقوم بتشفير محلل لـ تخفيض السعر.ما هي الخبرة في هذا؟

إذا لم يكن لديك أي شيء مفيد لتقوله عن التحليل الفعلي لـ Markdown، فامنحني الوقت.(قد يبدو هذا قاسيًا، لكن نعم، أنا أبحث عن رؤية، وليس عن حل، أي مكتبة تابعة لجهة خارجية).

للمساعدة قليلاً في الإجابات، تهدف التعبيرات العادية إلى ذلك تحديد الأنماط!لا لتحليل القواعد بأكملها.أن الناس يفكرون في القيام بذلك هو foobar.

  • إذا فكرت في Markdown، فهو يعتمد بشكل أساسي على مفهوم الفقرات.
  • على هذا النحو، قد يكون النهج المعقول هو تقسيم المدخلات إلى فقرات.
  • هناك أنواع عديدة من الفقرات، على سبيل المثال، العنوان، والنص، والقائمة، والاقتباس، والرمز.
  • وبالتالي فإن التحدي يكمن في تحديد هذه الفقرات وفي أي سياق تظهر.

سأعود بالحل، عندما أجد أنه يستحق المشاركة.

هل كانت مفيدة؟

المحلول

تطبيق تخفيض السعر الوحيد الذي أعرفه، والذي يستخدم محللًا فعليًا، هو جون ماكفارلينربط تخفيض السعر. المحلل اللغوي لها يعتمد على أ تحليل قواعد التعبير يسمى مولد المحلل اللغوي ربط.


يحرر: ماوريسيو فرنانديز صدر مؤخرا له محلل Markup Markdown البسيط, الذي كتبه كجزء من كتابه مدونة أوكسي محرك المدونة.لأن المحلل اللغوي مكتوب فيه أوكامل, ، إنها لأقصى حد بسيطة وقصيرة (268 SLOC لـ محلل, ، 43 SLOC لـ باعث HTML)، حتى الآن بتوهج سريع (20% أسرع من تخفيض (مكتوب بخط C المُحسّن يدويًا) و ستمائة مرات أسرع من بلوكلوث (روبي)))، على الرغم من أنه لم يتم تحسين الأداء حتى الآن.نظرًا لأنه مخصص فقط للاستخدام الداخلي بواسطة موريسيو نفسه لمدونته على الويب، فهناك بعض الانحرافات عن مواصفات تخفيض السعر الرسمية, ولكن ماوريسيو خلق الفرع الذي يعكس معظم تلك التغييرات.

نصائح أخرى

لقد قمت بإصدار تطبيق Markdown Java الجديد القائم على المحلل اللغوي الأسبوع الماضي، والذي يسمى pegdown.يستخدم pegdown محلل PEG لإنشاء شجرة بناء جملة مجردة أولاً، والتي يتم كتابتها لاحقًا إلى HTML.على هذا النحو، فهو نظيف تمامًا وأسهل بكثير في القراءة والصيانة والتوسيع من النهج القائم على regex.تعتمد قواعد PEG على تنفيذ John MacFarlane's C "peg-markdown".

ربما شيء يثير اهتمامك..

إذا كنت أحاول تحليل تخفيض السعر (وامتداده تخفيض السعر اضافية) أعتقد أنني سأحاول استخدام آلة الحالة وتحليلها حرفًا واحدًا في كل مرة، وربط بعض الهياكل الداخلية التي تمثل أجزاء من النص معًا أثناء المضي قدمًا، بمجرد تحليل كل شيء، وإنشاء الإخراج من الكائنات المربوطة معًا.

في الأساس، سأقوم ببناء شجرة تشبه DOM المصغرة عندما أقرأ ملف الإدخال.
لإنشاء مخرجات، أود فقط اجتياز الشجرة وإخراج HTML أو أي شيء آخر (PS، LaTex، RTF،...)

الأشياء التي يمكن أن تزيد من التعقيد:

  • حقيقة أنه يمكنك المزج بين HTML وتخفيض السعر، على الرغم من أن القاعدة قد تكون سهلة التنفيذ:ما عليك سوى تجاهل أي شيء يقع بين علامتين متوازنتين وإخراجه حرفيًا.

  • يمكن أن يكون مرجع عناوين URL والملاحظات في أسفل النص.يمكن أن يؤدي استخدام بنيات البيانات للارتباطات التشعبية إلى تسجيل شيء مثل:

    [my text to a link][linkkey]
    results in a structure like: 
        URLStructure: 
        |  InnerText : "my text to a link"
        |  Key       : "linkkey"
        |  URL       : <null>
    
  • يمكن تعريف الرؤوس بتسطير، مما قد يجبرنا على استخدام بنية بيانات بسيطة لفقرة عامة وتعديل خصائصها أثناء قراءتنا للملف:

    ParagraphStructure:
    |  InnerText    : the current paragraph text 
    |                 (beginning of line until end of line).
    |  HeadingLevel : <null> or 1-4 when we can assess 
    |                 that paragraph heading level, if any.
    

على أية حال، فقط بعض الأفكار.

أنا متأكد من أن هناك العديد من التفاصيل الصغيرة التي يجب الاهتمام بها وأنا متأكد تمامًا من أن Regexes يمكن أن تصبح مفيدة أثناء العملية.
بعد كل شيء، كان المقصود منهم معالجة النص.

ربما قرأت مواصفات بناء الجملة مرات كافية لأعرفها وأتعرف على كيفية تحليلها.

تعد قراءة كود المحلل اللغوي الحالي أمرًا رائعًا بالطبع، لمعرفة ما يبدو أنه المصدر الرئيسي للتعقيد، وما إذا كان يتم استخدام أي حيل ذكية خاصة.يبدو استخدام المجموع الاختباري MD5 غريبًا بعض الشيء، لكنني لم أدرس الكود بما يكفي لفهم سبب القيام بذلك.تعليق في روتين يسمى _EscapeSpecialChars() تنص على:

نحن نستبدل كل حرف بقيمة المجموع الاختباري MD5 المقابلة له؛من المحتمل أن يكون هذا مبالغة ، لكن يجب أن يمنعنا من الاصطدام بالهروب القيم عن طريق الصدفة.

يبدو استبدال شخصية واحدة بـ MD5 كاملًا أمرًا باهظًا، ولكن ربما يكون ذلك منطقيًا حقًا.

بالطبع، سيكون من الذكاء التفكير في إنشاء صيغة "حقيقية" لأداة مثل ثني للخروج من مستنقع regex.

إذا لم تكن لغة Perl هي الشيء الذي تفضله، فهناك تطبيقات Markdown فيها ما لا يقل عن 10 لغات أخرى.ربما لا تتمتع جميعها بتوافق بنسبة 100%، ولكنها تميل إلى أن تكون متقاربة جدًا.

أوراق تخفيض السعر هو تطبيق Java آخر يتم تعريف المحلل اللغوي فيه في ملف جافاCC قواعد.

هناك مكتبات متاحة بعدد من اللغات، بما في ذلك php، وروبي، وjava، وc#، وjavascript.أقترح النظر في بعض هذه الأفكار للحصول على أفكار.

يعتمد الأمر على اللغة التي ترغب في استخدامها، وبالنسبة لأفضل طريقة لتنفيذها، ستكون هناك طرق اصطلاحية وغير اصطلاحية للقيام بذلك.

تعمل Regexes في Perl، لأن Perl و regex هما أفضل الأصدقاء.

إذا كنت تستخدم لغة برمجة لديها أكثر من ثلاثة مستخدمين آخرين ، فيجب أن تكون قادرًا على العثور على مكتبة لتحليلها لك.تكشف Google-ing السريع عن مكتبات CL و Haskell و Python و JavaScript و Ruby وما إلى ذلك.من غير المرجح أن تحتاج إلى إعادة اختراع هذه العجلة.

إذا كان عليك حقًا كتابتها من نقطة الصفر ، أوصي بكتابة محلل مناسب.مع هذه التقنية ، لن تضطر إلى الهروب من الأشياء باستخدام تجزئة MD5.(أوافق على أنه إذا كان عليك القيام بشيء كهذا ، فقد حان الوقت لإعادة النظر في تصميمك.)

Markdown هي لغة JAWL (مجرد لغة ويكي أخرى)

هناك الكثير من مواقع الويكي مفتوحة المصدر التي يمكنك من خلالها فحص كود المحلل اللغوي.يستخدم معظمهم REGEX

تحقق من موقع ويكي المسمار، الذي يحتوي على خط أنابيب تنسيق متعدد التمريرات مثير للاهتمام، وهي تقنية رائعة جدًا - راجع /core/Formatter.cs و/core/FormatterPipeline.cs

الأفضل هو استخدام/الانضمام إلى مشروع موجود، فهذه الأنواع من الأشياء تكون دائمًا أصعب بكثير مما تبدو عليه

هنا يمكنك العثور على تطبيق JavaScript لـ Markdown.كما أنه يعتمد بشكل كبير على التعبيرات العادية، فهذه هي الطريقة الأسرع والأسهل لتحليل النص.

لكنه يحفظ الجزء MD5.

لا أستطيع المساعدة بشكل مباشر في تشفير التحليل، ولكن ربما يساعدك هذا الرابط بطريقة أو بأخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top