سؤال

أنا جديد في JFlex.لقد جمعت أن JFlex هو مولد محلل.ومع ذلك، ما زلت غير واضح بشأن ما يلي وأحتاج إلى توضيح بشأنه.

  1. ما مدى اختلاف ذلك عن استخدام regex لتحديد الأنماط وفصل البيانات وما هي الفوائد الإضافية لاستخدام JFlex.

  2. أي حالة استخدام محددة يكون فيها JFlex مفيدًا عبر التعبير العادي.

  3. هل هو مفيد على أية حال للتحليل العام، مثلاً للملفات النصية/XML؟

شكرا لك مقدما.

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

المحلول

جي فليكس ليس مولد محلل، ولكن مولد الماسح الضوئي.هو - هي رمزيات المدخل.استخدمه مع مولد محلل مثل كوب أو بياكك/ج.

هناك فرق مهم بين الماسح الضوئي والمحلل:

أسئلتك:

1) و2) لنفترض أنه يتعين عليك تحويل دفق إدخال من الأحرف إلى دفق من الرموز المميزة، في ضوء الأنماط التالية:

  • إذا تطابق الإدخال [0-9]+ (شيء مختلف عن \. يتبع) فهو تكامل غير موقع.يرسل "INTEGER" إلى الإخراج.
  • إذا تطابق الإدخال [0.9]+\.[0-9]* فهي نقطة عائمة غير موقعة.يرسل "FLOAT" إلى الإخراج.

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

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

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

3) يمكنك استخدام الماسح الضوئي الذي تم إنشاؤه والمحلل اللغوي الذي تم إنشاؤه جنبًا إلى جنب للتعرف على أي لغات خالية من السياق.مثل لغات البرمجة.على الرغم من أنه من الممكن تحليل XML باستخدامه (لم أحاول ذلك مطلقًا)، عادةً ما يتم استخدام الموزعات اللغوية ذات الأغراض المحددة لـ XML (مثل ساكس, ستاكس, ، وما إلى ذلك، وما إلى ذلك) نظرًا لأن XML له بنية معروفة جيدًا ولا داعي لذلك يولد محلل.

راجع للشغل، يرجى أن نأخذ في الاعتبار ذلك لا يمكنك تحليل XML باستخدام Regex. ;)

يعتبر.

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