Tôi đang cố gắng hiểu ý nghĩa của "tính xác định" trong các biểu thức, chẳng hạn như "ngữ pháp không ngữ cảnh xác định". (Có nhiều "điều" mang tính quyết định hơn trong lĩnh vực này). Tôi sẽ đánh giá cao một ví dụ nhiều hơn sau đó giải thích công phu nhất! Nếu có thể.
Nguồn gây nhầm lẫn chính của tôi là từ việc không thể biết tính chất của ngữ pháp này khác với sự mơ hồ (không) như thế nào.
Điều gần nhất tôi có thể tìm thấy ý nghĩa của nó là trích dẫn này từ bài báo của D. Knuth Về việc dịch ngôn ngữ từ trái sang phải :
Ginsburg và Greibach (1965) đã định nghĩa khái niệm ngôn ngữ xác định; chúng tôi chỉ ra trong Phần V rằng đây chính xác là những ngôn ngữ tồn tại ngữ pháp LR (k)
sẽ trở thành vòng tròn ngay khi bạn đến Section V
, bởi vì nó nói rằng trình phân tích cú pháp LR (k) có thể phân tích cú pháp là ngôn ngữ xác định ...
Dưới đây là một ví dụ mà tôi có thể tìm thấy để giúp tôi hiểu "mơ hồ" nghĩa là gì, xin vui lòng xem:
onewartwoearewe
Mà có thể được phân tích cú pháp là one war two ear ewe
hoặc o new art woe are we
- nếu một ngữ pháp cho phép điều đó (giả sử nó có tất cả các từ tôi vừa liệt kê).
Tôi cần làm gì để biến ngôn ngữ ví dụ này (không phải) mang tính quyết định? (Tôi có thể, ví dụ, loại bỏ từ o
khỏi ngữ pháp, để làm cho ngữ pháp không mơ hồ).
Là ngôn ngữ trên có tính quyết định?
Tái bút Ví dụ là từ cuốn sách Godel, Esher, Bach: Eternal Golden Braid.
Giả sử, chúng tôi định nghĩa ngữ pháp cho ngôn ngữ ví dụ như vậy:
S -> A 'we' | A 'ewe'
A -> B | BA
B -> 'o' | 'new' | 'art' | 'woe' | 'are' | 'one' | 'war' | 'two' | 'ear'
Theo lập luận về việc phải phân tích toàn bộ chuỗi, ngữ pháp này có làm cho ngôn ngữ không mang tính quyết định không?
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'
thì nó sẽ không còn mơ hồ nữa ...
S
. Bằng cách áp dụng quy tắc S := ...
, chúng tôi nhận được ...
, ..."