سؤال

أحاول كتابة محرك تعبير منتظم. أود أن أكتب محلل نزولا متكررا باليد. ما الذي سيعقد قواعد قواعد خالية من السياق دون العودية لغرض التعبيرات العادية (وليس اللغات التي يمكن وصفها بالتعبيرات العادية) تبدو وكأنها؟ هل سيكون الأمر أسهل في إعادة عامل السكر النحوي، أي التغيير a+ ل aa* ب شكرا لك مقدما!

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

المحلول

recursion اليسار:

Expression = Expression '|' Sequence
           | Sequence
           ;

Sequence = Sequence Repetition
         | <empty>
         ;

العودية الصحيحة:

Expression = Sequence '|' Expression
           | Sequence
           ;

Sequence = Repetition Sequence
         | <empty>
         ;

شكل غامض:

Expression = Expression '|' Expression
           | Sequence
           ;

Sequence = Sequence Sequence
         | Repetition
         | <empty>
         ;

نصائح أخرى

يمكنك أن تنظر إلى شفرة المصدر للتخطيط 9 Grep. وبعد الملف Grep.y لديه YACC (Lalr (1) إذا كنت أتذكر بشكل صحيح) Grammar للتعبيرات العادية. قد تتمكن من البدء من YACC Grammar، وإعادة كتابةها لتحليل النسب المتكرر.

مقالة ويكيبيديا recursion اليسار يعطي معلومات جيدة جدا حول كيفية سحب هذا قبالة.

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