আমি "ডিটারমিনিস্টিক" বলতে "ডিটারনিস্টিক প্রসঙ্গমুক্ত ব্যাকরণ" এর মত অভিব্যক্তি বলতে কী বোঝার চেষ্টা করছি। (এই ক্ষেত্রে আরও নির্বিচার "জিনিস" আছে)। আমি এর পরে আরও বিস্তৃত উদাহরণটির আরও প্রশংসা করব! যদি সম্ভব হয়.
আমার বিভ্রান্তির প্রাথমিক উত্স ব্যাকরণের এই সম্পত্তিটি (অ-) অস্পষ্টতার থেকে কীভাবে আলাদা তা বলতে সক্ষম না হওয়া থেকে।
নিকটস্থ আমি খোঁজার এটা মানে কি পেয়েছিলাম ডি Knuth দ্বারা কাগজ থেকে এই উদ্ধৃতি বাম থেকে ডানদিকে ভাষা অনুবাদ উপর :
জিন্সবার্গ এবং গ্রিবাচ (১৯65৫) একটি নির্বিচারবাদী ভাষার ধারণা সংজ্ঞায়িত করেছেন; আমরা পঞ্চম অনুচ্ছেদে দেখাই যে এগুলি স্পষ্টতই সেই ভাষাগুলি যার জন্য একটি এলআর (কে) ব্যাকরণ রয়েছে
যা আপনার কাছে পৌঁছানোর সাথে সাথেই বিজ্ঞপ্তি হয়ে যায় Section V
, কারণ সেখানে বলা হয়েছে যে এলআর (কে) পার্সার যা পার্স করতে পারে তা হ'ল নির্বিচারবাদী ভাষা ...
নীচের একটি উদাহরণ যা আমি "দ্বিপাক্ষিক" অর্থ কী তা বুঝতে আমাকে সহায়তা পেতে পারি, দয়া করে একবার দেখুন:
onewartwoearewe
যা পার্স করা যায় one war two ear ewe
বা হিসাবে o new art woe are we
- যদি কোনও ব্যাকরণ এটির অনুমতি দেয় (বলুন এটির মধ্যে আমার সদ্য তালিকাভুক্ত সমস্ত শব্দ রয়েছে)।
এই উদাহরণটি ভাষা (অ-) নির্জনবাদী করার জন্য আমার কী করা দরকার? (আমি উদাহরণস্বরূপ, o
ব্যাকরণ থেকে শব্দটি সরিয়ে ফেলতে পারি , ব্যাকরণটিকে দ্বিধাগ্রস্থ না করে)।
উপরোক্ত ভাষা নির্বিচারক?
পুনশ্চ. উদাহরণটি গডেল, এশার, বাচ: শাশ্বত গোল্ডেন ব্রাইড বই থেকে পাওয়া যায়।
যাক, আমরা উদাহরণস্বরূপ ভাষার জন্য ব্যাকরণটি সংজ্ঞায়িত করি:
S -> A 'we' | A 'ewe'
A -> B | BA
B -> 'o' | 'new' | 'art' | 'woe' | 'are' | 'one' | 'war' | 'two' | 'ear'
পুরো স্ট্রিংকে বিশ্লেষণ করার যুক্তি দিয়ে, এই ব্যাকরণটি কি ভাষাটিকে অ-সংঘবদ্ধ করে তোলে?
let explode s =
let rec exp i l =
if i < 0 then l else exp (i - 1) (s.[i] :: l) in
exp (String.length s - 1) [];;
let rec woe_parser s =
match s with
| 'w' :: 'e' :: [] -> true
| 'e' :: 'w' :: 'e' :: [] -> true
| 'o' :: x -> woe_parser x
| 'n' :: 'e' :: 'w' :: x -> woe_parser x
| 'a' :: 'r' :: 't' :: x -> woe_parser x
| 'w' :: 'o' :: 'e' :: x -> woe_parser x
| 'a' :: 'r' :: 'e' :: x -> woe_parser x
(* this line will trigger an error, because it creates
ambiguous grammar *)
| 'o' :: 'n' :: 'e' :: x -> woe_parser x
| 'w' :: 'a' :: 'r' :: x -> woe_parser x
| 't' :: 'w' :: 'o' :: x -> woe_parser x
| 'e' :: 'a' :: 'r' :: x -> woe_parser x
| _ -> false;;
woe_parser (explode "onewartwoearewe");;
- : bool = true
| Label | Pattern |
|---------+--------------|
| rule-01 | S -> A 'we' |
| rule-02 | S -> A 'ewe' |
| rule-03 | A -> B |
| rule-04 | A -> BA |
| rule-05 | B -> 'o' |
| rule-06 | B -> 'new' |
| rule-07 | B -> 'art' |
| rule-08 | B -> 'woe' |
| rule-09 | B -> 'are' |
| rule-10 | B -> 'one' |
| rule-11 | B -> 'war' |
| rule-12 | B -> 'two' |
| rule-13 | B -> 'ear' |
#+TBLFM: @2$1..@>$1='(format "rule-%02d" (1- @#));L
Generating =onewartwoearewe=
First way to generate:
| Input | Rule | Product |
|-------------------+---------+-------------------|
| '' | rule-01 | A'we' |
| A'we' | rule-04 | BA'we' |
| BA'we' | rule-05 | 'o'A'we' |
| 'o'A'we' | rule-04 | 'o'BA'we' |
| 'o'BA'we' | rule-06 | 'onew'A'we' |
| 'onew'A'we' | rule-04 | 'onew'BA'we' |
| 'onew'BA'we' | rule-07 | 'onewart'A'we' |
| 'onewart'A'we' | rule-04 | 'onewart'BA'we' |
| 'onewart'BA'we' | rule-08 | 'onewartwoe'A'we' |
| 'onewartwoe'A'we' | rule-03 | 'onewartwoe'B'we' |
| 'onewartwoe'B'we' | rule-09 | 'onewartwoearewe' |
|-------------------+---------+-------------------|
| | | 'onewartwoearewe' |
Second way to generate:
| Input | Rule | Product |
|-------------------+---------+-------------------|
| '' | rule-02 | A'ewe' |
| A'ewe' | rule-04 | BA'ewe' |
| BA'ewe' | rule-10 | 'one'A'ewe' |
| 'one'A'ewe' | rule-04 | 'one'BA'ewe' |
| 'one'BA'ewe' | rule-11 | 'onewar'A'ewe' |
| 'onewar'A'ewe' | rule-04 | 'onewar'BA'ewe' |
| 'onewar'BA'ewe' | rule-12 | 'onewartwo'A'ewe' |
| 'onewartwo'A'ewe' | rule-03 | 'onewartwo'B'ewe' |
| 'onewartwo'B'ewe' | rule-13 | 'onewartwoearewe' |
|-------------------+---------+-------------------|
| | | 'onewartwoearewe' |
B -> 'o'
, তবে এটি আর অস্পষ্ট হবে না ...
S
করুন rule নিয়মের প্রয়োগের মাধ্যমে S := ...
আমরা পেয়েছি ...
, ..."