BNF Grammar + Gold Lalr Parser، الفشل في التمييز بين الحالة الخاصة حالة جديدة من Whitespace

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

  •  11-09-2019
  •  | 
  •  

سؤال

  • أريد أن أفكر في مساحات البيض وطويلات نيوز ك Whitespaces العادي.
  • أريد التمييز بين خطوط الأيوطف من Whitespaces الأخرى علاوة على ذلك للسماح بحالة خاصة.

أول محاولة لكتابة قواعد قواعد متوافقة.

هنا هو القواعد:

! ------------------------------------------------- Sets

{WS}           = {Whitespace} - {CR} - {LF}
{ID Head}      = {Letter} + [_]
{ID Tail}      = {Alphanumeric} + [_]
{String Chars} = {Printable} + {HT} - ["\]

! ------------------------------------------------- Terminals

! The following defines the Whitespace terminal using the {WS}
! set - which excludes the carriage return and line feed 
! characters

Whitespace    = {WS}+ | {CR}{LF} | {CR} | {LF}
!NewLine       = {CR}{LF} | {CR} | {LF}
MyNewLine      = {CR}{LF} | {CR} | {LF}
هل كانت مفيدة؟

المحلول

أنها غامضة لأن كلاهما يحتوي على نفس المجموعة الفرعية {CR}{LF} | {CR} | {LF}.

بالنظر إلى المدخلات {CR}{LF} ليس لدى المحلل في طريقة لمعرفة المحطة التي يجب أن تتطابق عليها.

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

حلا أفضل (يحتمل) أفضل هو استخدام دول Tomekenizer (ربما يتم التحكم فيه من المحلل)، لتغيير كيفية تخصيص مدخلات Newline. من الصعب القول دون فهم قواعد اللغة الخاصة بك بالكامل. بالإضافة إلى ذلك، لقد مرت بضع سنوات منذ أن عابث بهذه الأشياء.

نصائح أخرى

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

أنا لست من ذوي الخبرة في المنطقة، لكن هذا ما أتذكره من نظريتي من فئة حساب الرقبة وتصميم مترجم.

آمل أن يساعد هذا.

إجابة متأخرة.

إلى هزلي، أنا فقط متأخرا مؤخرا ؛-) عضو.

الاستمرار في استخدام إعلانات القواعد القائمة المعتادة

! ====================================================================
{Whitespace Ch} = {Whitespace} - {CR} - {LF}

Whitespace = {Whitespace Ch}+
Newline    = {CR}{LF} | {CR} | {LF}
! ====================================================================

مبيعات وايتيسيس مقابل التمييز الجديد يؤخذ بالفعل في الاعتبار!

النظر في معالجة حالتك الخاصة عند كتابة قواعد الإنتاج الخاصة بك.

للحالة المعقدة، قد تحتاج حتى إلى تحديد بعض المحطات الافتراضية (التقنية المتقدمة).

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

آخر تحرير: من فضلك، شارك إذا كنت قد تناولت بالفعل المشكلة. شكرا.

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