سؤال

(بادئ ذي بدء ، هذا ليس HW ، لدي كل الإجابات)

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

<UNIT> ::= ( <CLAUSE> ) | a | b | c
<ITEM> ::= not <UNIT> | <UNIT>
<CLAUSE> ::= <CLAUSE> and <PHRASE> | <PHRASE>
<PHRASE> ::= <ITEM> | <ITEM> or <PHRASE>

and يتم ترك المشغل ترابطًا (عودية يسارية)or المشغل مرتبط صحيح (هذه المرة ، إنه متكرر يميني)

تعبير معين c and b or not a and ( not b or c ), ، لماذا أكثر صواب "و" أعلى في شجرة التحليل؟
الطريق ، أرى c **and** b or not a and ( not b or c ) يجب أن يكون معظمهم أعلى في شجرة التحليل.

قدم أستاذنا هذه الإجابة:

ها هي شجرة التحليل في تدوين ملتوية.

(clause (clause (clause (phrase (item (unit 'c'))))
'and'
(phrase (item (unit 'b'))
'or'
(phrase (item 'not'
(unit 'a')))))
**'and'** // is higher in parse tree
(phrase (item (unit '('
(clause (phrase (item 'not’(unit 'b'))
'or'
(phrase (item (unit 'c')))))
')' ))))
هل كانت مفيدة؟

المحلول

تبدو قواعد BNF المعطاة متسقة مع شجرة التحليل ، ومتسقة مع الادعاء بأنه "و" من المفترض أن يكونا يسارًا. إذا كنت ترغب في إنتاج "A و B و C" باستخدام هذه القواعد ، بدءًا من "جملة" ، تبدأ بهذه الطريقة:

  1. بند
  2. بند و عبارة

عند هذه النقطة ، لا يمكن أن تصبح العبارة "B و C" (بدون أقواس) لأن الجمل فقط يمكن أن تنتج "و". يجب أن تتطور العبارة إلى "C" ، ويمكن أن يصبح البند الموجود على السطر الثاني "A و B". هذا سوف يجبر أقصى اليمين "و" أن يكون أعلى في شجرة التحليل.

نظرًا لتقييم العناصر العليا في شجرة Parse في آخر مرة ، فإن هذا يتفق مع الادعاء بأن المشغل "و" ترك نقابيًا.

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