编译原理实验语义分析_「编译原理」LL(1)文法分析,简单优先分析
首先我們來(lái)介紹一下LL(1)文法分析。
LL(1)文法是一種自頂向下的分析方式,是從非終結(jié)符到終結(jié)符的分析方式,這種方式和我們之前說(shuō)的LR(0)分析方式是剛好相反的,在我們使用LR(0)分析方式的時(shí)候。我們可以看到這個(gè)符號(hào)棧是由開(kāi)始空的而后變?yōu)榻K結(jié)符之后再變?yōu)榉墙K結(jié)符的過(guò)程。
下面介紹一下用LL(1)文法進(jìn)行分析句子的過(guò)程。
首先要寫(xiě)出FIRST集和FOLLOW集。
之后根據(jù)FIRST集和FOLLOW集來(lái)進(jìn)行預(yù)測(cè)分析表的構(gòu)造
預(yù)測(cè)分析表構(gòu)造的時(shí)候若FIRST集沒(méi)有推出ε那么就可以直接在預(yù)測(cè)分析表的FIRST集的位置填入原非終結(jié)符所對(duì)應(yīng)的定義項(xiàng)。如果推出了ε,那么就要在FOLLOW集的位置填入ε。
當(dāng)然,我們要注意的一個(gè)地方就是如果表中的一個(gè)空格中填入了兩個(gè)元素(select集交集非空),那么就說(shuō)明這個(gè)文法不適合用LL(1)文法來(lái)分析,就要改變分析方式。
下面講一下具體的分析過(guò)程
符號(hào)棧的開(kāi)始是非終結(jié)符S
輸入串的棧中的內(nèi)容是輸入串的從尾部逐個(gè)輸入棧。
之后我們要從之前填好的預(yù)測(cè)分析表中來(lái)找到對(duì)應(yīng)的規(guī)則,從這個(gè)非終結(jié)符開(kāi)始,將非終結(jié)符變?yōu)榻K結(jié)符和非終結(jié)符的和。之后,一旦這個(gè)符號(hào)棧和這個(gè)輸入串的棧的棧頂相同,那么就可以進(jìn)行彈出棧頂元素。因?yàn)槲覀儚棾龅慕Y(jié)果肯定是終結(jié)符,所以剩下的結(jié)果肯定是一個(gè)非終結(jié)符。當(dāng)棧頂?shù)脑乇徊粩嗟貜棾鲋?#xff0c;之后如果這個(gè)符號(hào)棧和輸入串的棧均為空的時(shí)候,就可以表明現(xiàn)在的分析是成功的。
之后我們來(lái)介紹一下簡(jiǎn)單優(yōu)先分析
簡(jiǎn)單優(yōu)先分析是按照終結(jié)符和非終結(jié)符之間的優(yōu)先關(guān)系來(lái)確定句柄的。
這里首先給出優(yōu)先關(guān)系的定義,這里的優(yōu)先關(guān)系的定義要在原先的“>”,“
當(dāng)兩個(gè)符號(hào)直接連在一塊的時(shí)候例如……XYZ……則XYZ的優(yōu)先關(guān)系相等。如果Y還可以繼續(xù)向下推,則有XZ
若兩個(gè)都能繼續(xù)向下推,由于我們從最左下角的句柄開(kāi)始進(jìn)行規(guī)約,所此時(shí)左邊推出的優(yōu)先級(jí)要大于右邊的優(yōu)先級(jí)。關(guān)于句柄的概念我們?cè)谙乱徽碌乃惴麅?yōu)先分析中再進(jìn)行介紹。
這里知道了關(guān)系之后我們就可以根據(jù)它們的關(guān)系來(lái)構(gòu)造關(guān)系矩陣表。簡(jiǎn)單優(yōu)先分析的關(guān)系矩陣中是出現(xiàn)過(guò)得所有的元素,包含終結(jié)符和非終結(jié)符。
從文法的第一個(gè)句子開(kāi)始向后找關(guān)系,之后把關(guān)系矩陣寫(xiě)出來(lái),需要注意的是這里的大于號(hào)和小于號(hào)是不能交換的比如A>B并不等于B
簡(jiǎn)單優(yōu)先分析方法的步驟
首先這里分為符號(hào)棧,關(guān)系,輸入串棧,規(guī)則,四個(gè)對(duì)應(yīng)的
符號(hào)棧開(kāi)始為#,輸入串的棧為我們要分析的字符串的逆序入棧。當(dāng)關(guān)系為小于和等于的時(shí)候輸入棧的棧頂彈出進(jìn)入符號(hào)棧,關(guān)系為大于的時(shí)候進(jìn)行規(guī)約。
我們直接查表來(lái)進(jìn)行比較要注意,此時(shí)文法的開(kāi)始符號(hào)的旁邊有這個(gè)“#”,也可以由此得到“#”和文法開(kāi)始符號(hào)之間的關(guān)系。
在進(jìn)行規(guī)約的時(shí)候,我們要在后面的規(guī)則中寫(xiě)出對(duì)應(yīng)的文法。之后一直是這個(gè)過(guò)程直到規(guī)約到文法的初始符。
總結(jié)
以上是生活随笔為你收集整理的编译原理实验语义分析_「编译原理」LL(1)文法分析,简单优先分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: OPPO Find X6系列正式官宣:将
- 下一篇: 央视315点名景区高空项目不安全 景区回