গাণিতিক এক্সপ্রেশন ব্যাকরণ রূপান্তর


9

থিওডোর নরভেল (১৯৯৯) দ্বারা রিকার্সিভ ডেসেন্টের পার্সিং এক্সপ্রেশনগুলি প্রবন্ধে লেখক পাটিগণিত প্রকাশের জন্য নিম্নলিখিত ব্যাকরণ দিয়ে শুরু করেছেন:

E --> E "+" E | E "-" E | "-" E | E "*" E | E "/" E | E "^" E | "(" E ")" | v

যা বেশ খারাপ, কারণ এটি অস্পষ্ট এবং বাম-পুনরাবৃত্ত। সুতরাং তিনি এটি থেকে বাম পুনরাবৃত্তি অপসারণ থেকে শুরু করেন এবং তার ফলস্বরূপ:

E --> P {B P}
P --> v | "(" E ")" | U P
B --> "+" | "-" | "*" | "/" | "^"
U --> "-"

তবে তিনি কীভাবে এই ফলাফলটি পেয়েছিলেন তা আমি বুঝতে পারি না। আমি যখন নিজেই বাম পুনরাবৃত্তি সরিয়ে দেওয়ার চেষ্টা করি, আমি এটি নিম্নলিখিত উপায়ে করছি:

  1. প্রথমত, আমি এমন প্রোডাকশনগুলিকে একসাথে গ্রুপ করি যার একটি গ্রুপে পুনরাবৃত্তি না হয় এবং অন্যটিতে (বাম-পুনরাবৃত্ত):

    E --> E "+" E | E "-" E | E "*" E | E "/" E | E "^" E     // L-recursive
    E --> v | "(" E ")" | "-" E
  2. এরপরে, আমি তাদের নাম রাখি এবং সহজ ম্যানিপুলেশনের জন্য ফ্যাক্টর:

    E --> E B E  // L-recursive; B stands for "Binary operator"
    E --> P  // not L-recursive; P stands for "Primary Expression"
    P --> v | "(" E ")" | U E   // U stands for "Unary operator"
    B --> "+" | "-" | "*" | "/" | "^"
    P --> "-"

    এখন আমাকে কেবল প্রথম দুটি প্রযোজনার সাথেই ডিল করতে হবে, যা এখন মোকাবেলা করা আরও সহজ।

  3. আমি অ-এল-রিকার্সিভ প্রডাকশন (যা কেবলমাত্র Pপ্রাথমিক অভিব্যক্তি) থেকে শুরু করে এবং এটি Toptionচ্ছিক টেইল অনুসারে অনুসরণ করে সেই প্রথম দুটি প্রযোজনা পুনরায় লিখি , যা আমি বাকী মূল উত্পাদনটিকে প্রথম বাম-রিকার্স ননটার্মিনাল হিসাবে কম হিসাবে সংজ্ঞায়িত করি B Eলেজ অনুসরণ করে (যা খালি ) ঠিক আছে T, বা যা খালি থাকতে পারে:

    E --> P T
    T --> B E T |

    (লেজের জন্য খালি বিকল্পটি নোট করুন)।

  4. এই দুটি প্রযোজনা আমি এখন EBNF এ আবার লিখতে পারি:

    E --> P {B E}

    যা প্রায় কি লেখক পেতে, কিন্তু আমি আছে Eপরিবর্তে Pশূন্য-অর-আরো পুনরাবৃত্তি ধরণ (লেঙ্গুড়) ভিতরে আছে। অন্যান্য প্রযোজনাগুলি আমি যেমন পেয়েছি তেমনই পেয়েছি:

    P --> v | "(" E ")" | U E
    B -> "+" | "-" | "*" | "/" | "^"
    U -> "-"

    তবে এখানেও আমি প্রথম প্রযোজনার Eপরিবর্তে পেয়েছি ।PP

সুতরাং, আমার প্রশ্নটি: আমি কী মিস করছি? অটোরের মতো একই সঠিক ফর্মটি পেতে এখনই সিনট্যাক্সের আমার কী বীজগণিত রূপান্তরকরণের প্রয়োজন? আমি বিকল্পগুলির জন্য চেষ্টা করেছিলাম E, তবে এটি কেবল আমাকে লুপগুলিতে নিয়ে যায়। আমার সন্দেহ হয় যে এর বিকল্প হিসাবে আমার কোনওরকম প্রয়োজন আছে , তবে এটি সমর্থন করার Pজন্য Eআমি কোনও আইনি রূপান্তর জানি না। সম্ভবত আপনি জানেন যে হারিয়ে যাওয়া শেষ পদক্ষেপটি কী?


ফর্ম্যাটিংয়ের জন্য LaTeX ব্যবহার বিবেচনা করুন। একটি প্রাইমারের জন্য এখানে দেখুন । (দেখুন এখানে এই ক্ষেত্রে লেটেক্ উপযুক্ততা সম্পর্কে আলোচনার জন্য।)
রাফায়েল

উত্তর:


8

অনুপস্থিত পদক্ষেপ:

E --> P T
T --> B E T |

E টি পুনরায় লিখুন:

E --> P T
T --> B P T T | 

সরল করুন টি:

E --> P T
T --> B P T | 

সমতুল্য:

E --> P T
T --> {B P}

এবং আপনি সেখানে আছেন।


1
একটি উত্তরের উত্তরের জন্য ধন্যবাদ :-) এখন আমি দেখতে পেয়েছি আমি কী মিস করেছি: আমি এটিকে অন্য উপায়ে উপস্থাপিত করেছিলাম এবং সেটাই ছিল সমস্যা। কিন্তু তবুও আমি একটি ছোট্ট টুকরোটি বুঝতে পারি না: আপনি কীভাবে জানবেন যে আপনি নিরাপদে Tএকটিতে একত্রে মিশে যেতে পারেন T? এর জন্য কি কোনও নিয়ম আছে? (আমার সন্দেহ হয় যে এটি কোনওভাবেই বুলিয়ান বীজগণিত যুক্তির নিয়মের মতো হতে পারে যা "এএ = এ" বলেছে।)
সাসকিউ

বিটিডাব্লু কেন এই পোস্টটি এখানে cstheory.sx থেকে সরানো হয়েছে এবং পার্থক্য কী? আমি ভবিষ্যতে ভুল এড়াতে জানতে চাই।
সাসকিউ

2
@ সাসকিউ সিএসটিওরি কেবলমাত্র তাত্ত্বিক কম্পিউটার বিজ্ঞানের গবেষণা-স্তরের প্রশ্নের জন্য, সিএসথেরির FAQ দেখুন বিশদ জন্য।
জুহো

1
@SasQ: টিএক্সটিটি|ε উত্পন্ন এক্স* এবং তাই করে টিএক্সটি|ε। আরও সাধারণ,এল*এল*=এল* জন্য এলযেকোনো ভাষা. মনে রাখবেন খালি শব্দটি রয়েছেεডান হাত যেমন গুরুত্বপূর্ণ; এটি সমস্ত ব্যাকরণের খণ্ডগুলিকে ধরে রাখে নাএল+ +এল+ +এল+ +
রাফায়েল

@ রাফেল: আদর্শের নিয়মের সাথে এর কি কোনও যোগসূত্র রয়েছে *? আমি "ড্রাগন বুক" (3.3, p.91) এ দেখেছি x** = x*। আপনি কি একই নিয়ম ব্যবহার করেছেন?
সাসকিউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.