أبحث عن تعريف واضح ما "tokenizer", "محلل" و "lexers" وكيف أنها ترتبط مع بعضها البعض استخدامها ؟

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

  •  22-08-2019
  •  | 
  •  

سؤال

أنا أبحث عن تعريف واضح ما "tokenizer", "محلل" و "lexer" وكيف أنها ترتبط مع بعضها البعض (على سبيل المثال ، يقوم محلل استخدام tokenizer أو العكس بالعكس)?أنا بحاجة إلى إنشاء البرنامج سوف تذهب من خلال c/ساعة الملفات المصدر إلى استخراج البيانات إعلان والتعاريف.

لقد كنت أبحث عن أمثلة يمكن العثور على بعض المعلومات, ولكن أنا حقا تكافح من أجل فهم المفاهيم الأساسية مثل القواعد النحوية ، تحليل الأشجار شجرة جملة مجردة وكيف تترابط مع بعضها البعض.في نهاية المطاف هذه المفاهيم تحتاج إلى تخزينها في برنامج الفعلي ، ولكن 1) ما لا يبدون ، 2) هل هناك المشتركة تطبيقات.

لقد كنت أبحث في ويكيبيديا على هذه المواضيع والبرامج مثل ليكس و Yacc ، ولكن بعد أن ذهب من خلال مترجم فئة (EE الكبرى) أنا وجدت أنه من الصعب أن نفهم تماما ما يجري.

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

المحلول

وA tokenizer يكسر تيار من النص إلى الرموز، عادة من خلال البحث عن البيضاء (علامات التبويب، مسافات، خطوط جديدة).

وA lexer هو في الأساس tokenizer، ولكن عادة ما تعلق السياق إضافية إلى الرموز - هذا المنوال هو العدد، أن رمز عبارة عن سلسلة حرفية، هذا الرمز المميز الآخر هو عامل المساواة

ومحلل يأخذ تيار من الرموز من lexer ويحوله إلى شجرة جملة مجردة تمثل (عادة) البرنامج الذي يمثله النص الأصلي.

وراجعت الماضي، كان أفضل كتاب عن هذا الموضوع "المجمعين: المبادئ، تقنيات وأدوات " عادة يعرف فقط باسم" كتاب التنين ".

نصائح أخرى

على سبيل المثال:

int x = 1;

أ lexer أو tokeniser سيتم تقسيم ذلك إلى الرموز 'int',' × ', '=', '1', ';'.

محلل سوف تأخذ تلك الرموز واستخدامها لفهم في بعض الطريق:

  • لدينا بيان
  • إنه تعريف عدد صحيح
  • عدد صحيح يسمى 'x'
  • 'x' يجب أن يكون initialised مع قيمة 1

وأود أن أقول أن lexer وtokenizer هي في الأساس نفس الشيء، وأنهم تحطيم النص إلى أجزاء المكونة له (في 'الرموز'). محلل ثم يفسر الرموز باستخدام قواعد اللغة.

وأنا لن نتوقف أيضا حتى على الاستخدام الاصطلاحي الدقيق على الرغم - الناس غالبا ما تستخدم "تحليل" لوصف أي إجراء لتفسير قطعة من النص

.

(إضافة إلى إعطاء إجابات)

  • Tokenizer سوف أيضا إزالة أي تعليقات و العودة فقط الرموز إلى Lexer.
  • Lexer سوف أيضا تحديد نطاقات لأولئك الرموز (المتغيرات/وظائف)
  • محلل ثم بناء مدونة/هيكل البرنامج
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top