L文法規則
❶ 文法的規則描述
程序設計語言中的幾類單詞可用下述規則描述:
〈標識符〉→l|l〈字母數字〉
〈字母數字〉→l|d|l〈字母數字〉|d〈字母數字〉
〈無符號整數〉→d|d〈無符號整數〉
〈運算符〉→+|-|*|/|=|〈〈等號〉|〉〈等號〉……
〈等號〉→=
〈界符〉→,|;|(|)|……
其中l表示a~z中的任何一英文字母,d表示0~9中的任一數字。
關鍵字(保留字)也是一種單詞,一般關鍵字(保留字)都是由字母構成,它的描述也極容易,實際上,關鍵字(保留字)集合是標識符集合的子集。
最復雜的一類單詞要屬無符號實數了,比如25.55e+5和2.1,它們可以由如下規則描述。
例4.6
〈無符號數〉→d〈余留無符號數〉|.〈十進小數〉|e〈指數部分〉
〈余留無符號數〉→d〈余留無符號數〉|.〈十進小數〉|e〈指數部分〉|ε
〈十進小數〉→d〈余留十進小數〉
〈余留十進小數〉→e〈指數部分〉|d〈余留十進小數〉|ε
〈指數部分〉→d〈余留整指數〉|s〈整指數〉
〈整指數〉→d〈余留整指數〉
〈余留整指數〉→d〈余留整指數〉|ε
其中s表示正或負號(+,-),d表示0~9中的任一數字。
舉例
例:1型(上下文有關)文法
文法G[S]: S→CDAb→bA
C→aCA Ba→aB
C→bCB Bb→bB
AD→aD C→ε
BD→bD D→ε
Aa→bD
L(G)={ww|w∈{a,b}*}
例:2型(上下文無關)文法
文法G[S]: S→0A|1B|0
A→0A|1B|0S
B→1B|1|0
❷ 編譯原理的LL(1)文法是什麼意思
L表明自頂向下分析是從左向右掃描輸入串,第2個L表明分析過程中將用最左到推倒,1表明只需向右看一個符號便可決定如何推倒即選擇哪個產生式(規則)進行推導,類似也可以有LL(k)文法,也就是需要向前查看k個符號才能確定選用哪個產生式、、
❸ 英語語法規則這么多,怎樣才能記清呢
英語語法規則多,各個用法之間的差別有時比較細微,不易弄清楚,更難以記住。但是,如果方法正確,下一些功夫,是可以學到手的。學習英語語法,首先必須弄清每個規則的基本概念和主要用法,然後再分辨與它相近的別的規則或用法的差異。這樣才能弄清規則,記住用法。可以採取歸納、分類、對比等方法來達到上面的目的。
下面幾種辦法對理解和記住英語語法規則會有所幫助:
(1)將一條規則或一個詞的所有用法歸納起來學習。比如將連詞as的5種常見用法歸納如下:
①They took notes as they listened to the lecture. (表示時間)
②As you are tired,you had better have a rest. (表示原因)
③He doesn』t speak as others do.(表示方式)
④Do not make the same mistakes as I did. (表示比較)
⑤Rich as he is,he is not happy. (表示讓步,rich as he is意思與though he is rich相同)
又如,在學完現在完成時的各種用法之後,可以將這些用法歸納起來學習。
(2)將容易混淆的不同的語法規則和詞的用法,排在一起進行對比,很有利於分清差別。下面簡單對比不定代詞some,any,no的不同用法:
Our teacher has some English novels. (some在肯定句中作定語)
Have you any French novels? (any在疑問句中作定語)
No,l haven』t have any French novels. (any和not用在否定句中,any作定語)
She has no German novels. (no在否定句中作定語)
又如人們學習英語現在完成時,常將它與過去一般時的用法相比較,學習將來一般時常將shall,will,to be going to,be+動詞不定式進行比較。
(3)將內容相同而用法有細微差別的一些語法現象或詞加以分類。如表示時間的介詞有at,in,on,buring,for,from,before,after,by,past,since,till,to,within,表示地點的介詞有above,at,in,on,behind,below,beside,down,into,out of,over,under等。再找出一些典型的例子比較其用法的差別,就會加深印象。
學習英語的最終目的不僅僅是理解和記清規則和用法,而是要能使用它。因此,在懂得了規則之後,還有必要進行口頭、筆語練習以及聽力和閱讀的實踐。語言的練習和實踐,是學習語言最有效的方法。等到能使用英語時,就用不著再去專門記憶語法規則了。
❹ 怎麼判斷一個文法是LR(0)
LR(0)分析就是LR(K)分析當K=0的情況,亦即在分析的每一步,只要根據當前的棧頂狀態 (或者說根據當前分析棧中已移進或歸約出的全部文法符號)就能確定應採取何種分析動作,而無須向前查看輸入符號。
LR(0)分析器的分析能力最低,但它是構造其餘三種LR分析器的基礎。SLR是「簡單LR」分析的縮寫,它是為了解決構造LR(0)分析器所出現的問題而形成的一種方法,其分析能力自然要比LR(0)分析器稍強一些。
(4)L文法規則擴展閱讀:
1965年,D.Knuth首先提出了LR(K)文法及LR(K)分析技術。所謂LR(K)分析,是指從左至右掃描和自底向上的語法分析,且在分析的每一步,只須根據分析棧當前已移進和歸約出的全部文法符號,並至多再向前查看K個輸入符號,就能確定相對於某一產生式左部符號的句柄是否已在分析棧的頂部形成,從而也就可以確定當前所應採取的分析動作。
LR分析是當前最一般的分析方法。這是因為它對文法的限制最少,現今能用上下文無關文法描述的程序設計語言一般均可用LR方法進行有效的分析,而且在分析的效率上也不比諸如不帶回溯的自頂向下分析、一般的「移進歸約」以及算符優先等分析方法遜色。
此外,LR分析器在工作過程中,還能准確及時地發現輸入符號串的語法錯誤。凡此種種,就使LR分析方法在國際上受到了廣泛的重視。
❺ 希伯來語的語法規則是怎樣的
一、語法規則:
希伯來語語法是部分分析式的,使用前置詞而非文法格來表達如與格、離格和賓格這樣的形式。但是屈折在動詞和名詞的形成中扮演了決定性角色。比如,名詞有一個構造狀態,叫做「smikhut」,用來指示「屬於」關系: 這是更加曲折語言的屬格的逆反。處在 smikhut 的詞經常用連字型大小 hyphen 合並起來。在現代講話中,這個構造的使用有時同意思為「of」的前置詞「shel」是可互換的。但是在很多情況下古老的變格形式被保留了(特別是在習慣用語和類似情況下),並且「人稱」前接詞被廣泛的用來「變格」前置詞。
希伯來文缺乏形容詞,因此他們在描寫的過程中就用比喻的方式,比如:你的愛情比酒更美;你的唇好像一條朱紅線;我的良人在男子中,如同蘋果樹在樹林中。
二、拼寫規則:
希伯來語共有二十二個輔音字母,沒有母音字母,拼寫的時候用四個輔音字母Alef, He, Vav, Yod當作母音來拼寫單詞,也就是說這四個輔音字母Alef, He, Vav, Yud身兼兩職,既做輔音字母又做母音字母,這四個字母也同樣可以互相組合成為復合母音。現代的希伯來語拼寫是相當規則和准確的。
在當今以色列以完整拼寫法"Ktiv male"為主,有時文中也夾雜使用加點拼寫法「Ktiv menukad」字母加點表示母音,目的是使單詞發音更加清晰,及純輔音拼寫法"Ktiv haser"拼寫時只使用輔音不使用母音,目的是使書寫更加快捷簡便,一些常用的單詞如לא (/lo/,不), אמא (/ima/, 媽媽), 等等,因為人們都知道這些常用的單詞怎樣發音拼寫時幾乎只用純輔音拼寫法
(1)"Ktiv male"(完整拼寫法),用四個輔音字母Alef, He, Vav, Yud當作母音來拼寫單詞,為當今希伯來語最主要最常用的拼寫法。
(2)「Ktiv menukad」(加點拼寫法),字母加點表示母音,主要用於教導希伯來語初學者准確發音
(3)"Ktiv haser"(純輔音拼寫法)拼寫時只使用輔音不使用母音
❻ 請為語言L寫一文法使其滿足LL(1),其L={w|w屬於(a|b)*且w中a、b的個數相等}
S->aSb|bSa|空
❼ 正規文法的詳細特徵
1.右線性文法
設G[S]=(VN,VT,P,S)為CFG,若P中的產生或均有如下的形式:
A→aB或A→a(A∈VN,a∈VT)
則稱G為右線性文法。例如,文法
G1[S]=({S,A,B},{a,b},P1,S)
其中
P1={S→aA,A→aA,A→bB,A→b,B→bB,B→b}
為一右線性文法,G1所產生的正規集為
L(G1)={aibj |i,j≥1}
2.左線性文法
若一個文法G[S]=(VN,VT,P,S)中的產生式均有如下的形式:
A→Ba或A→a(A,B∈VN,a∈VT)
則稱G為左線性文法。例如,文法
G2[S]=({S,A},{a,b},P2,S)
其中
P2={S→Sb,S→Ab,A→Aa,A→a}
為一左線性文法,且有
L(G2)=L(G1)={aibj |i,j≥1}
請注意,雖然文法
G3[S]=({S,A,B},{a,b},P3,S)
其中
P3={S→aA,A→aA,A→Bb,A→b,B→Bb,B→b}
也同樣產生語言{aibj |i,j≥1},但由於G3中同時含有左線性產生式和右線性產生式,故G3不是正規文法。
另外
P4={S-->aA,A-->ab},
也不是正規文法
❽ 編譯原理 文法L={ a^nb^mc^kd^n | m,n,k≥1 }
你寫的顯然是錯誤的。語言中只有開始一個a和結尾一個d。且B,C無窮無盡。
下面是一種寫法,可供參考。
S->aSd|BC
B->bB|b
C->cC|c
❾ LL(1)文法-------編譯原理
我正在寫一個編譯器,源代碼在這里:
http://code.google.com/p/bellman/source/browse
其中詞法規則在lex.l文件中,語法規則在grammer.y中,分別用flex和bison的輸入文件的格式寫的。我實現了一個類似C/C++的語法
地址如下:
http://code.google.com/p/bellman/source/browse/trunk/lib/bellman/lex.l
http://code.google.com/p/bellman/source/browse/trunk/lib/bellman/grammer.y
具體有什麼問題可以發郵件[email protected]
❿ 如何判斷一個文法是LL文法
對文法G的句子進行確定的自頂向下語法分析的充分必要條件是,G的任意兩個具有相同左部的產生式A->α|β 滿足下列條件:
(1)如果α、β均不能推導出ε,則 FIRST(α) ∩ FIRST(β) = Φ。
(2)α 和 β 至多有一個能推導出 ε。
(3)如果 β *═> ε,則 FIRST(α) ∩ FOLLOW(A) = Φ。
將滿足上述條件的文法稱為LL(1)文法。
第一個L代表從左向右掃描輸入符號串,第二個L代表產生最左推導,1代表在分析過程中執行每一步推導都要向前查看一個輸入符號——當前正在處理的輸入符號。
LL(1)文法既不是二義性的,也不含左遞歸,對LL(1)文法的所有句子均可進行確定的自頂向下語法分析。
並不是所有的語言都可以用LL(1)文法來描述,而且不存在判定某語言是否是LL(1)文法的演算法。也就是說,確定的自頂向下分析只能實現一部分上下文無關語言的分析,這就是LL(1)文法所產生的語言。另外,在上述LL(1)文法的條件中,要求:ε ∈ FIRST(α1),ε ∈ FIRST(α2),…ε ∈ FIRST(αn) 中至多有一個成立。