生成語法
BNF 與生成語法
先讓我們來看一個很簡單的生成語法範例,如下所示。
BNF 語法 | 生成的語言 |
---|---|
S = A B A = a | b B = c | d | L = {ab, ac, bc, bd} |
我們也可以用類似的語法描述自然語言,以下是一個範例。
BNF 語法 | 生成的語言 |
---|---|
S = N V N = John | Mary V = eats | talks | L = {John eats, John talks, Mary eats, Mary Talks} |
運算式語法
以下規則描述了一個數學運算式的語法,其中的 E 代表運算式 (Expression),而 T 代表運算式中的一個基本項 (Term)。
E = T | T [+-*/] E
這條規則代表說 E 可以生成 T ,或者先生成 T 之後緊跟著 +-*/ 其中的一個字元,然後再遞回性的生成 E 。
同樣的、T = [0-9] 代表 T 可以生成 0 到 9 當中的一個數字,或者生成 「(」 符號後再生成 E 接著生成 「)」 符號。
E =T | T [+-*/] ET = [0-9]
以下是符合該語法與不符合該語法的一些語句範例。
符合語法的範例 | 不符合語法的範例 |
---|---|
4 | x+y |
2+5 | 3+)8 |
2-1*(2)-(9*0) | (3-*8)/4 |
8+(5-7*((6)((2))(7)*8+4+(6))/(6-1)-(9)) |
英語的語法
語言的剖析範例
S = NP VP
NP = D N
VP = V NP
接著,讓我們來看看一組較為完整的英語語法規則。
規則 | 說明 |
---|---|
S => NP VP | 句子 = 名詞子句 接 動詞子句 |
NP => Det Adj* N PP* | 名詞子句 = 定詞 接 名詞 |
VP => V (NP PP*) | 動詞子句 = 動詞 接 名詞子句 接副詞子句 |
PP => P NP | 副詞子句 = 副詞 接 名詞子句 |
根據這樣的規則,我們就可以將 『The dog saw a man in the park.』 這句話,剖析成下列的語法樹。
甚至,對於更複雜的句子,像是 『Ordinary daily multivitamin and mineral supplements could help adults with diabetes fight off some minor infections.』,也可能轉換成下列的剖析樹。
一般來說,目前的自然語言剖析技術並沒有辦法將所有句子都轉換成完整的樹狀結構,通常只有 60%-70% 左右的成功率而已。因此,有時會採用部分剖析樹直接使用,而非一定要完全剖析成功。
當然,英語的語法並沒有那麼簡單,語法規則可能會愈寫愈複雜,但是仍然難以正確剖析所有英文語句,以下是一組更複雜的英語語法:
SENTENCE: STATEMENT | QUESTION | COMMAND
STATEMENT: ADJ+[] ADVERB+[] (SUBJECT) ADJECTIVE+[] (VERB)
QUESTION: ADJ+[] ADVERB+[] (DO SUBJECT) ADJECTIVE+[] (VERB)
COMMAND: ADJ+[] ADVERB+[] (VERB)
ADVERB: ADV
| WHEN (STATEMENT)
| IF (STATEMENT)
| GERUND
| PREPLY NP
ADJECTIVE: GERUND | PREPISH NP | ADJ
WHEN: "when" | "whereby" | "until" | "unless"
IF: ["not"] ("if" | "only if" | "because")
AND: "and" | "but" | "or"
PREPLY: [not] ("to"|"onto"|"into"|"of"|"out of"|"in"|"within"|"by"|"with"|"without")
PREPISH: [not] ("to"|"of"|"in"|"by"|"with"|"without")
ADJ: ADJ ("and"|",") ADJ | GERUND
NP: (("a"|"the") (ADJ+[] SNP))} WHICH CLAUSE
CLAUSE: ADJECTIVE+[] ADVERB+[] SUBJECT VERB
| ADJECTIVE+[] ADVERB+[] SUBJECT VERB PREP
SUBJECT: NP
OBJECT: NP
WHICH: "that" | ""
GERUND: FOGHORN GER
FOGHORN: (PREPLY "-" NP)[] "-" OBJECT
ADJ: ADJ AND ADJ|
"purple"| "smelly"| "happy"| "windy" | "unbelievable" etc.
ADV: ADV AND ADV |
"quicky" | "slowly" | "happily"
NOUN: "cat" | "dog" | "man" | etc.
VERB: ("berate" [OBJECT]) | ("stop" [OBJECT]) | ("flee" [OBJECT]) | ("put" OBJECT) LOCATION+ ...
GER: "berating" | "stopping" | "fleeing" | "putting" etc.