Ngữ pháp tuyến tính phải - điểm
S->ε
S->1A
S->0S
S->9I
S->3C
S->5E
S->4D
S->2B
S->7G
S->6F
S->8H
F->3K
K->0F
A->2L
K->1G
A->5B
A->0J
B->7A
J->5A
G->6K
G->8S
H->9K
F->5S
K->2H
I->6E
I->5D
J->4S
D->8I
B->6S
K->9B
F->6A
G->9A
K->6L
K->4J
C->1E
L->8K
E->5C
B->4K
C->0D
J->2K
D->2C
A->9F
J->7C
C->6J
C->8L
E->0K
L->0C
B->9C
E->2S
L->6I
I->0L
J->0I
B->2I
I->3B
H->1C
I->7F
C->4H
F->1I
G->4I
I->0G
C->3G
F->8C
D->0A
E->3A
I->9H
A->7D
C->2F
H->7I
A->8E
F->9D
E->8F
A->6C
D->6G
G->0E
D->5F
E->9G
H->2D
D->7H
H->3E
I->2A
K->3I
C->9S
C->7K
E->4B
D->1B
L->1D
J->9E
I->1S
E->1L
J->8D
D->9J
L->2E
J->3L
B->5L
B->8B
L->7J
L->9L
G->1F
A->4A
K->5K
B->3J
H->6H
E->7E
J->1J
D->4E
G->2G
J->6B
D->3D
E->6D
H->4F
I->4C
C->5I
F->0H
H->5G
K->7S
G->3H
L->5H
H->8J
A->3S
H->0B
B->1H
G->7L
K->8A
F->2J
F->7B
L->4G
F->4L
A->1K
B->0G
G->5J
L->3F
Sau đó, tùy thuộc vào cách bạn chọn 'chạy' nó, nó sẽ xuất ra 'có' hoặc 'không'.
Không phải là một mục nghiêm túc, chỉ là một số niềm vui;)
EDIT:
Có lẽ tôi nên giải thích một chút.
Một ngữ pháp là một tập hợp các quy tắc (sản phẩm) xác định một ngôn ngữ . Một ngôn ngữ có thể được coi là tất cả các chuỗi có thể được hình thành bởi một bảng chữ cái, phù hợp với các quy tắc ngữ pháp của nó.
Ở đây bảng chữ cái là tập hợp của tất cả các chữ số thập phân. Các quy tắc của ngữ pháp là tất cả các chuỗi phải tạo thành các số nguyên thập phân chia hết cho 13.
Chúng ta có thể sử dụng ngữ pháp ở trên để kiểm tra xem một chuỗi có thuộc ngôn ngữ của chúng ta hay không.
Các quy tắc của ngữ pháp chứa các ký hiệu đầu cuối (là các thành phần trong ngôn ngữ) cũng như các ký hiệu không đầu cuối được thay thế theo cách đệ quy.
Thật dễ dàng để giải thích những gì đang xảy ra với một ví dụ:
Hãy nói ví dụ rằng chuỗi chúng tôi đang kiểm tra là 71955.
Luôn có một ký hiệu bắt đầu (không phải là thiết bị đầu cuối), trong trường hợp ngữ pháp ở trên đây là 'S'. Tại thời điểm này, chúng tôi chưa đọc bất kỳ ký tự nào trong chuỗi của chúng tôi:
current pattern symbol read
S ε
Bây giờ, chúng tôi đọc ký hiệu đầu tiên trong chuỗi của chúng tôi là '7', sau đó chúng tôi tìm một quy tắc trong ngữ pháp có bất kỳ ký tự không nào trong mẫu hiện tại của chúng tôi ở phía bên trái của '->' và đó có biểu tượng của chúng tôi ở phía bên phải của '->'. May mắn thay, có một (S-> 7G), vì vậy chúng tôi thay thế các biểu tượng không đầu cuối trong mẫu hiện tại của chúng tôi bằng phía bên phải của quy tắc mới:
current pattern symbol read
7G 7
Bây giờ chúng ta có mẫu 'G' không phải đầu cuối trong mẫu của chúng tôi và ký hiệu tiếp theo được đọc là '1', vì vậy chúng tôi tìm một quy tắc trong ngữ pháp bắt đầu bằng 'G-> 1 ". Chúng tôi thấy có một (G-> 1F), vì vậy chúng tôi thay thế thiết bị đầu cuối không bằng RHS của quy tắc mới của chúng tôi:
current pattern symbol read
71F 1
Tiếp tục lặp lại quá trình này:
Quy tắc tiếp theo: F-> 9D
current pattern symbol read
719D 9
Quy tắc tiếp theo: D-> 5F
current pattern symbol read
7195F 5
Quy tắc tiếp theo: F-> 5S
current pattern symbol read
71955S 5
Tại thời điểm này, chúng ta không còn ký hiệu nào trong chuỗi, nhưng chúng ta có một ký hiệu không đầu cuối khác trong đó. Chúng ta thấy từ quy tắc đầu tiên trong ngữ pháp mà chúng ta có thể thay thế 'S' bằng chuỗi trống (ε): S->
Làm như vậy cung cấp cho chúng tôi mẫu hiện tại: 71955ε tương đương với 71955.
Chúng tôi đã đọc tất cả các ký hiệu trong chuỗi của chúng tôi và mẫu không chứa các ký hiệu không phải đầu cuối. Điều đó có nghĩa là chuỗi thuộc về ngôn ngữ và do đó 71955 trên thực tế chia hết cho 13.
Tức là mục tiêu là có mẫu = chuỗi. Nếu bạn còn lại với bất kỳ ký hiệu không đầu cuối nào, sau khi đọc tất cả các ký hiệu trong chuỗi của bạn, chuỗi không thuộc về ngôn ngữ. Tương tự, nếu bạn vẫn có nhiều ký hiệu trong chuỗi của mình để đọc, nhưng không có quy tắc nào trong ngữ pháp cho phép bạn đi tiếp, thì chuỗi đó không thuộc về ngôn ngữ.