هل يمكن أن تتمكن وظيفة Rebol Parse من إنشاء قواعد لتحليل CSS2 / CSS3 بالكامل؟

StackOverflow https://stackoverflow.com/questions/3484854

سؤال

هل هناك قيود على إعادة تشغيل الطاقة البيعلية؟ هل ستكون قادرة على تحليل المواصفات الكاملة CSS2 / CSS 3 أم أنها ستواجه استحالة نظرية لتشكيل بعض القواعد؟

تحديث بعد الإجابة العزلية: أعني في regexp أعتقد أنه سيكون مستحيلًا إلى حد ما ، هل الحاجز أقوى بكثير؟

إذا كانت الإجابة بنعم ، فهل هذا يعني أنه سيكون من الممكن بناء متصفح في Rebol Vid متوافق مع HTML5؟

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

المحلول

سؤالك عن "هل هناك حدود" زلقة. سأحاول وأعطيك "ال الإجابة "بدلاً من مجرد" نعم ، بالتأكيد "... والتي ستكون أكثر ملاءمة وإن لم تكن تعليمية للغاية. :)

النظر في المقتطف التالي. يلتقط موقف المحلل x, ، ثم يدير ما هو بين قوسين في لهجة DO. هذا الرمز يعيد مجموعات x إلى ذيل الإدخال إذا كان css-parser تنجح الوظيفة ، أو إلى رأس الإدخال في حالة فشل الوظيفة. أخيرًا ، يحدد موقع التحليل إلى التيار x. وكما نعلم ، يعود Parse بشكل صحيح فقط إذا كنا في نهاية سلسلة الإدخال عندما تنتهي القواعد ...

parse my-css [x: (x: either css-parser x [tail x] [head x]]) :x]

هذا رمز لهجة ساري المفعول و يعود صحيح إذا (وفقط إذا) css-parser الوظيفة تنجح. لذلك ، إذا كان بإمكانك كتابة محلل CSS في Rebol على الإطلاق ، فيمكنك كتابته "في لهجة Parse".

(هذا يؤدي إلى مسألة من الممكن حل مشكلة حوسبة معينة في وظيفة Rebol. والحمد لله ، لا يتعين على علماء الكمبيوتر إعادة إجابة هذا السؤال في كل مرة تظهر فيها لغة جديدة. يمكنك حساب أي شيء يتم حسابه بواسطة آلة تورينج ، ولا شيء لا يمكن أن يكون ... وتحقق من كلمات آلان تورينج, ، من حيث العلمان. تحليل CSS ليس بالضبط مشكلة التوقف ، لذلك نعم ... يمكن القيام بذلك.)

سآخذ طعنة في إعادة صياغة سؤالك:

"هل من الممكن كتابة كتلة من القواعد (التي لا تستخدم paren! مشوه واحد؟ "

يتم وضع المواصفات الرسمية لما يجعل CSS جيدة أو سيئة بواسطة W3C:

http://www.w3.org/tr/css2/grammar.html

لكن لاحظ أنه حتى هناك ، ليس كل شيء مقطوع. لا يمكن أن تستبعد مواصفاتها "الرسمية" لثوابت الألوان #abcd, ، اضطروا إلى الكتابة عن ذلك في التعليقات ، باللغة الإنجليزية:

/*
 * There is a constraint on the color that it must
 * have either 3 or 6 hex-digits (i.e., [0-9a-fA-F])
 * after the "#"; e.g., "#000" is OK, but "#abcd" is not.
 */
hexcolor
  : HASH S*
  ;

هذا يقودنا إلى أن نسأل ما إذا كنا سنغفر لـ Rebol لعدم تمكننا من القيام بهذا النوع من التقدير بعد أن ربطنا أيدي Parse عن طريق أخذ Paren!/Get-Word!/set-word! (أريد فقط أن أشير إلى هذا النوع من القضية في ضوء سؤالك).

كجزء من مشروع Rebol 3 Parse ، كانت هناك كتابة لـ نظرية التحليل...

لهجة Parse هي عضو معزز في عائلة لغات التحليل من أعلى إلى أسفل (عائلة TDPL) بما في ذلك لغة التحليل من أعلى إلى أسفل (TDPL) ، ولغة التحليل من أعلى إلى أسفل (GTDPL) ونحوي تعبير التحليل (PEG) و يستخدم نفس طريقة تحليل "الاختيار المطلوب" كأفراد الأسرة الآخرين.

كما هو موضح في الرابط أعلاه ، فإن كونك عضوًا في هذه الفئة يجعل تحليل Rebol أقوى من كل من التعبيرات العادية و LL Parsers. أفترض أنها أقوى من LL (K) و LL* أيضًا ، لكنها مضى منذ فترة منذ أن درست هذه الأشياء ولن أراهن على حياتي. قون

لا تحتاج حقًا إلى فهم ما يعنيه كل هذا من أجل الاستفادة منه للإجابة على سؤال "هل يمكن القيام به". منذ الناس ادعى إلى تحليل CSS مع Antlr, ، و antlr هو محلل LL* ، ثم أقول أن Rebol يمكنه القيام بذلك. بارين! هو Ace-in-the-boly الذي يتيح لك القيام "بأي شيء" إذا ضربت الحائط ، لكنه منحدر زلق لبدء استخدامه بلا مبالاة.

نصائح أخرى

يجب أن تكون قادرة تمامًا على تحليل المواصفات ، إذا كان لديك دافع وصبر لكتابة القواعد. سيكون الأمر أكثر مشاركة قليلاً من ، على سبيل المثال ، محلل JSON ، لكنه سيكون نفس الفكرة.

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