قواعد الأسبقية البسيطة

في علم الحاسوب ، تُعرَّف قواعد الأسبقية البسيطة بأنها قواعد نحوية رسمية خالية من السياق ، يمكن تحليلها باستخدام محلل أسبقية بسيط . [ 1 ] طُوِّر هذا المفهوم لأول مرة عام 1964 على يد كلود بير ، [ 2 ] ثم أُعيد اكتشافه لاحقًا، انطلاقًا من أفكار روبرت فلويد ، على يد نيكلاوس ويرث وهيلموت ويبر اللذين نشرا ورقة بحثية بعنوان "أويلر: تعميم للغة ألغول، وتعريفها الرسمي" ، نُشرت عام 1966 في مجلة اتصالات رابطة مكائن ​​الحوسبة . [ 3 ]

التعريف الرسمي

G = ( N , Σ, P , S ) هي قواعد أسبقية بسيطة إذا كانت جميع قواعد الإنتاج في P تتوافق مع القيود التالية:

أمثلة

SأSSب|ج{\displaystyle S\to aSSb|c}
جدول الأسبقية
SأبجدولارS=˙=˙أ=˙بجدولار{\displaystyle {\begin{array}{c|ccccc}&S&a&b&c&\$\\\hline S&{\dot {=}}&\lessdot &{\dot {=}}&\lessdot &\\a&{\dot {=}}&\lessdot &&\lessdot &\\b&&\gtrdot &&\gtrdot &\gtrdot \\c&&\gtrdot &\gtrdot &\gtrdot &\gtrdot \\\$&&\lessdot &&\lessdot &\end{array}}}

محلل أسبقية بسيط

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

يُشابه تنفيذ المحلل النحوي إلى حد كبير المحلل النحوي التصاعدي العام . تُستخدم مكدسة لتخزين بادئة صالحة لصيغة جملة من اشتقاق أقصى اليمين . تُستخدم الرموز ⋖ و ≐ و ⋗ لتحديد المحور ، ولمعرفة متى يتم الإزاحة أو الاختزال .

تطبيق

  • احسب جدول علاقات أسبقية ويرث-ويبر لقواعد نحوية ذات رمز ابتدائي S.
  • قم بتهيئة مكدس باستخدام علامة البداية $.
  • أضف علامة نهاية $ إلى السلسلة التي يتم تحليلها ( المدخلات ).
  • حتى يصبح Stack يساوي "$ S" ويصبح Input يساوي "$"
    • ابحث في الجدول عن العلاقة بين Top(stack) و NextToken(Input)
    • إذا كانت العلاقة ⋖ أو ≐
      • يحول :
      • دفع (المكدس، العلاقة)
      • دفع (المكدس، الرمز التالي (الإدخال))
      • RemoveNextToken(Input)
    • إذا كانت العلاقة ⋗
      • يقلل :
      • SearchProductionToReduce(Stack)
      • قم بإزالة المحور من المكدس
      • ابحث في الجدول عن العلاقة بين الرمز غير الطرفي من قاعدة الإنتاج وأول رمز في المكدس (بدءًا من الأعلى)
      • دفع (المكدس، العلاقة)
      • دفع (المكدس، غير طرفي)

SearchProductionToReduce (Stack)

  • ابحث عن الرمز ⋖ العلوي في المكدس؛ هذا الرمز وجميع الرموز التي تعلوه هي المحور .
  • أوجد قاعدة الإنتاج للقواعد النحوية التي يكون فيها المحور هو الجانب الأيمن.

مثال

بافتراض وجود لغة برمجة، يمكنها تحليل التعبيرات الحسابية التي تتضمن عمليات الضرب والجمع:

E --> E + T' | T' تي --> تي ص --> ص * خ | خ F --> ( E' ) | رقم E' --> E 

num هو رمز طرفي، ويقوم المحلل اللغوي بتحليل أي عدد صحيح على أنه num ؛ يمثل E تعبيرًا حسابيًا، وT هو حد و F هو عامل.

وجدول التحليل:

هـإيتيتيF+*()رقمدولار
هـ
إي
تي
تي
F
+
*
(
)
رقم
دولار
كومةأسبقيةمدخلفعل
دولار2 * ( 1 + 3 )$يحول
⋖ 2 دولار* ( 1 + 3 )$REDUCE (F -> num)
$ ⋖ F* ( 1 + 3 )$تقليل (صحيح -> خطأ)
$ ⋖ T* ( 1 + 3 )$يحول
$ ⋖ T ≐ *(1 + 3)$يحول
$ ⋖ T ≐ * ⋖ (1 + 3 )$يحول
$ ⋖ T ≐ * ⋖ ( ⋖ 1+ 3 )$REDUCE 4× (F -> num) (T -> F) (T' -> T) (E ->T ')
$ ⋖ T ≐ * ⋖ ( ⋖ E+ 3 )$يحول
$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ +3)$يحول
$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + < 3)$REDUCE 3× (F -> num) (T -> F) (T' -> T)
$ ⋖ T ≐ * ⋖ ( ⋖ E ≐ + ≐ T)$تقليل 2× (E -> E + T) (E' -> E)
$ ⋖ T ≐ * ⋖ ( ≐ E')$يحول
$ ⋖ T ≐ * ⋖ ( ≐ E' ≐ )دولارREDUCE (F -> ( E' ))
$ ⋖ T ≐ * ≐ FدولارREDUCE (T -> T * F)
$ ⋖ TدولارREDUCE 2× (T' -> T) (E -> T')
$ ⋖ Eدولاريقبل

علاقة الأسبقية بين ويرث وويبر

في علم الحاسوب ، توجد علاقة ويرث-ويبر بين زوج من الرموز(VتVن){\displaystyle (V_{t}\cup V_{n})}من الضروري تحديد ما إذا كانت القواعد النحوية الرسمية قواعد أسبقية بسيطة . في هذه الحالة، يمكن استخدام محلل الأسبقية البسيط . سُميت هذه العلاقة نسبةً إلى عالمي الحاسوب نيكلاوس ويرث وهيلموت ويبر.

الهدف هو تحديد متى تكون البادئات القابلة للاستخدام هي المحور ، ومتى يجب تقليصها.{\displaystyle \trdot }وهذا يعني أنه تم العثور على نقطة الارتكاز ،{\displaystyle \lessdot }هذا يعني أن تحولاً محتملاً قد بدأ، و{\displaystyle \doteq }يعني ذلك أن العلاقة تبقى في نفس المحور .

التعريف الرسمي

جي=Vن،Vت،S،P{\displaystyle G=\langle V_{n},V_{t},S,P\rangle }
XY{أαXYβPأVنα،β(VنVت)*X،Y(VنVت)XY{أαXبβPب+Yγأ،بVنα،β،γ(VنVت)*X،Y(VنVت)XY{أαبYβPب+γXY*أدلتاأ،بVنα،β،γ،دلتا(VنVت)*X،Y(VنVت)أVت{\displaystyle {\begin{aligned}X\doteq Y&\iff {\begin{cases}A\to \alpha XY\beta \in P\\A\in V_{n}\\\alpha ,\beta \in (V_{n}\cup V_{t})^{*}\\X,Y\in (V_{n}\cup V_{t})\end{cases}}\\X\lessdot Y&\iff {\begin{cases}A\to \alpha XB\beta \in P\\B\Rightarrow ^{+}Y\gamma \\A,B\in V_{n}\\\alpha ,\beta ,\gamma \in (V_{n}\cup V_{t})^{*}\\X,Y\in (V_{n}\cup V_{t})\end{cases}}\\X\gtrdot Y&\iff {\begin{cases}A\to \alpha BY\beta \in P\\B\Rightarrow ^{+}\gamma X\\Y\Rightarrow ^{*}a\delta \\A,B\in V_{n}\\\alpha ,\beta ,\gamma ,\delta \in (V_{n}\cup V_{t})^{*}\\X,Y\in (V_{n}\cup V_{t})\\a\in V_{t}\end{cases}}\end{aligned}}}

خوارزمية حساب علاقات الأسبقية

سنحدد ثلاث مجموعات للرمز:

حهـأد+(X)={Y|X+Yα}تيأأنال+(X)={Y|X+αY}حهـأد*(X)=(حهـأد+(X){X})Vت{\displaystyle {\begin{aligned}\mathrm {Head} ^{+}(X)&=\{Y\mid X\Rightarrow ^{+}Y\alpha \}\\\mathrm {Tail} ^{+}(X)&=\{Y\mid X\Rightarrow ^{+}\alpha Y\}\\\mathrm {Head} ^{*}(X)&=(\mathrm {Head} ^{+}(X)\cup \{X\})\cap V_{t}\end{aligned}}}
Head * ( X ) هي X إذا كان X رمزًا طرفيًا، وإذا كان X رمزًا غير طرفي، فإن Head * ( X ) هي المجموعة التي تضم الرموز الطرفية فقط التي تنتمي إلى Head + ( X ). هذه المجموعة مكافئة للمجموعة الأولى أو Fi( X ) الموصوفة في محلل LL .
الرأس + ( X ) والذيل + ( X ) يكونان إذا كان X طرفيًا.

الشفرة الزائفة لحساب العلاقات هي:

  • RelationTable  :=
  • لكل إنتاجأαP{\displaystyle A\to \alpha \in P}
    • لكل رمزين متجاورين XY في α
      • أضف (جدول العلاقات،XY{\displaystyle X\doteq Y})
      • أضف (جدول العلاقات،Xحهـأد+(Y){\displaystyle X\lessdot \mathrm {Head} ^{+}(Y)})
      • أضف (جدول العلاقات،تيأأنال+(X)حهـأد*(Y){\displaystyle \mathrm {Tail} ^{+}(X)\gtrdot \mathrm {Head} ^{*}(Y)})
  • أضف (جدول العلاقات،دولارحهـأد+(S){\displaystyle \$\lessdot \mathrm {Head} ^{+}(S)}) حيث S هو الحرف غير الطرفي الأولي للقواعد، و$ هو علامة حد
  • أضف (جدول العلاقات،تيأأنال+(S)دولار{\displaystyle \mathrm {Tail} ^{+}(S)\gtrdot \$}) حيث S هو الحرف غير الطرفي الأولي للقواعد، و$ هو علامة حد
{\displaystyle \lessdot }و{\displaystyle \gtrdot }يتم استخدامها مع المجموعات بدلاً من العناصر كما تم تعريفها، وفي هذه الحالة يجب عليك إضافة جميع الضرب الديكارتي بين المجموعات/العناصر.

المثال 1

SأSSب|ج{\displaystyle S\to aSSb|c}

  • الرأس + ( أ ) =
  • الرأس + ( S ) = { a, c }
  • الرأس + ( ب ) =
  • الرأس + ( ج ) =
  • الذيل + ( أ ) =
  • الذيل + ( S ) = { b, c }
  • الذيل + ( ب ) =
  • الذيل + ( ج ) =
  • الرأس * ( أ ) = أ
  • Head * ( S ) = { a, c }
  • الرأس * ( ب ) = ب
  • الرأس * ( ج ) = ج
  • SأSSب{\displaystyle S\to aSSb}
    • أ بجوار S
      • أS{\displaystyle a\doteq S}
      • أحهـأد+(S){\displaystyle a\lessdot \mathrm {Head} ^{+}(S)}
        • أأ{\displaystyle a\lessdot a}
        • أج{\displaystyle a\lessdot c}
    • S بجوار S
      • SS{\displaystyle S\doteq S}
      • Sحهـأد+(S){\displaystyle S\lessdot \mathrm {Head} ^{+}(S)}
        • Sأ{\displaystyle S\lessdot a}
        • Sج{\displaystyle S\lessdot c}
      • تيأأنال+(S)حهـأد*(S){\displaystyle \mathrm {Tail} ^{+}(S)\gtrdot \mathrm {Head} ^{*}(S)}
        • بأ{\displaystyle b\gtrdot a}
        • بج{\displaystyle b\gtrdot c}
        • جأ{\displaystyle c\gtrdot a}
        • جج{\displaystyle c\gtrdot c}
    • S بجوار b
      • Sب{\displaystyle S\doteq b}
      • تيأأنال+(S)حهـأد*(ب){\displaystyle \mathrm {Tail} ^{+}(S)\gtrdot \mathrm {Head} ^{*}(b)}
        • بب{\displaystyle b\gtrdot b}
        • جب{\displaystyle c\gtrdot b}
  • Sج{\displaystyle S\to c}
    • يوجد رمز واحد فقط، لذلك لا تتم إضافة أي علاقة.
جدول الأسبقية
SأبجدولارSأبجدولار{\displaystyle {\begin{array}{c|ccccc}&S&a&b&c&\$\\\hline S&\doteq &\lessdot &\doteq &\lessdot &\\a&\doteq &\lessdot &&\lessdot &\\b&&\gtrdot &\gtrdot &\gtrdot &\gtrdot \\c&&\gtrdot &\gtrdot &\gtrdot &\gtrdot \\\$&&\lessdot &&\lessdot &\end{array}}}

المثال 2

Sأ|أتي|[S]{\displaystyle S\to a|aT|[S]}

تيب|بتي{\displaystyle T\to b|bT}

  • الرأس + ( S ) = { a, [ }
  • الرأس + ( أ ) =
  • الرأس + ( T ) = { b }
  • الرأس + ( [ ) =
  • الرأس + ( ] ) =
  • الرأس + ( ب ) =
  • الذيل + ( S ) = { a, T, ], b }
  • الذيل + ( أ ) =
  • الذيل + ( T ) = { b, T }
  • الذيل + ( [ ) =
  • الذيل + ( ] ) =
  • الذيل + ( ب ) =
  • Head * ( S ) = { a, [ }
  • الرأس * ( أ ) = أ
  • الرأس * ( T ) = { b }
  • الرأس * ( [ ) = [
  • الرأس * ( ] ) = ]
  • الرأس * ( ب ) = ب
  • Sأتي{\displaystyle S\to aT}
    • أ بجوار تي
      • أتي{\displaystyle a\doteq T}
      • أحهـأد+(تي){\displaystyle a\lessdot \mathrm {Head} ^{+}(T)}
        • أب{\displaystyle a\lessdot b}
  • S[S]{\displaystyle S\to [S]}
    • [ بجوار S]
      • [S{\displaystyle [\doteq S}
      • [حهـأد+(S){\displaystyle [\lessdot \mathrm {Head} ^{+}(S)}
        • [أ{\displaystyle [\lessdot a}
        • [[{\displaystyle [\lessdot [}
    • S بجوار ]
      • S]{\displaystyle S\doteq ]}
      • تيأأنال+(S)حهـأد*(]){\displaystyle \mathrm {Tail} ^{+}(S)\gtrdot \mathrm {Head} ^{*}(])}
        • أ]{\displaystyle a\gtrdot ]}
        • تي]{\displaystyle T\gtrdot ]}
        • ]]{\displaystyle ]\gtrdot ]}
        • ب]{\displaystyle b\gtrdot ]}
  • تيبتي{\displaystyle T\to bT}
    • ب بجوار تي
      • بتي{\displaystyle b\doteq T}
      • بحهـأد+(تي){\displaystyle b\lessdot \mathrm {Head} ^{+}(T)}
        • بب{\displaystyle b\lessdot b}
جدول الأسبقية
Sتيأب[]دولارSتيأب[]دولار{\displaystyle {\begin{array}{c|ccccccc}&S&T&a&b&[&]&\$\\\hline S&&&&&&\doteq &\doteq \\T&&&&&&\gtrdot &\gtrdot \\a&&\doteq &&\lessdot &&\gtrdot &\gtrdot \\b&&\doteq &&\lessdot &&\gtrdot &\gtrdot \\{\text{[}}&\doteq &&\lessdot &&\lessdot &&\\]&&&&&&\gtrdot &\gtrdot \\\$&\doteq &&\lessdot &&\lessdot &&\end{array}}}

ملحوظات

  1. نظرية التحليل والترجمة والتجميع: التجميع، ألفريد ف. أهو، جيفري د. أولمان، برنتيس هول، 1972.
  2. ^ كلود بير (1964). “Arbres، أكوام وتجميع”. Revue française de سمة المعلومات .الأشجار، والمجموعات، والتجميع باللغة الإنجليزية
  3. الآلات واللغات والحوسبة ، برنتيس هول ، 1978، رقم ISBN 9780135422588قام ويرث وويبر [1966] بتعميم قواعد الأسبقية لفلويد، وحصلا على قواعد الأسبقية البسيطة.

مراجع

  • ألفريد ف. أهو، جيفري د. أولمان (1977). مبادئ تصميم المترجمات . الطبعة الأولى. أديسون-ويسلي.
  • ويليام أ. باريت، جون د. كوتش (1979). بناء المترجمات: النظرية والتطبيق . جمعية باحثي العلوم.
  • جان بول تريمبلاي، بي جي سورنسون (1985). نظرية وممارسة كتابة المترجمات . ماكجرو هيل.

للمزيد من القراءة

  • أهو، ألفريد ف.؛ أولمان، جيفري د.، نظرية التحليل والترجمة والتجميع