亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 3584 | 回復(fù): 4
打印 上一主題 下一主題

看過(guò)LCC源碼的高人進(jìn),重溫一下這段代碼的意思。。。 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-08-13 01:28 |只看該作者 |倒序?yàn)g覽
最近在看LCC的源代碼在看到分析表達(dá)式一節(jié)中時(shí)遇到一個(gè)函數(shù),代碼如下:

Tree expr1(int tok) {
        static char stop[] = { IF, ID, 0 };
        Tree p = expr2();

        if (t == '='
        || (prec[t] >=  6 && prec[t] <=  
        || (prec[t] >= 11 && prec[t] <= 13)) {
                int op = t;
                t = gettok();
                if (oper[op] == ASGN)
                        p = asgntree(ASGN, p, value(expr1(0)));
                else
                        {
                                expect('=');
                                p = incr(op, p, expr1(0));
                        }
        }
        if (tok)       
                test(tok, stop);
        return p;
}

這個(gè)函數(shù)是下面賦值表達(dá)式文法的轉(zhuǎn)換函數(shù),文法如下:

assignment-expression:
    conditional-expression
    unary-expression assign-operator assignment-expression

可是令我不解的是,為什么這個(gè)expr1函數(shù),一進(jìn)來(lái)就先調(diào)用expr2呢?(expr2是條件表達(dá)式的分析函數(shù))

我一開(kāi)始的想法是,既然assignment-expression的文法,產(chǎn)生式右端的兩項(xiàng)是“或”的關(guān)系,理論上應(yīng)該翻譯成:

if( t 屬于 condition-expression )
  expr2();
else (t 屬于 unary-expression assign-operator assignment-expression )
other();

才對(duì)呀?

是不是我哪里想錯(cuò)了?

論壇徽章:
2
摩羯座
日期:2013-10-10 14:29:04天蝎座
日期:2014-01-03 09:14:49
2 [報(bào)告]
發(fā)表于 2010-08-13 08:55 |只看該作者
書(shū)上說(shuō),a = b = c這樣的多重賦值語(yǔ)句,解釋為a = (b = c),賦值操作為右結(jié)合。

所以,對(duì)于
assignment-expression:
  unary-expression {assign-operator conditional-expression}

應(yīng)該先分析conditional-expression,也就是先調(diào)用expr2。

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2010-08-14 02:20 |只看該作者
謝謝,EricFisher 。:emn1:

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2010-08-14 03:22 |只看該作者
有點(diǎn)明白了。。。
原來(lái)是assignment-expression的翻譯,沒(méi)完全遵照文法,為的是有"強(qiáng)大"的錯(cuò)誤處理能力。。。書(shū)上這么說(shuō)的。

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2010-08-16 00:52 |只看該作者
明白了,原來(lái)是因?yàn)殡m然賦值表達(dá)式的文法如下所示:
assignment-expression:
    conditional-expression
    unary-expression assign-operator assignment-expression
但第一個(gè)產(chǎn)生式被去掉,然后第二個(gè)產(chǎn)生式被修改。
最后新的產(chǎn)生式,實(shí)際上是
assignment-expression:
    conditional-expression assign-operator assignment-expression
因?yàn)閏onditional-expression包含unary-expression,這樣以來(lái),只要等分析返回時(shí)通過(guò)語(yǔ)義分析就可判定出那些不合法的產(chǎn)生式。這樣就實(shí)現(xiàn)了更強(qiáng)的出錯(cuò)處理能力了。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP