2010-11-19 101 views
0

在下面的代碼段中,我收到了一些錯誤,我不確定爲什麼儘管使用我所有的資源來研究它們,但我仍然得到它們。這是SMLNJ編碼。SML語法錯誤幫助

compComm (DeallocComm(var, exp), env, ip, codes, contIP)= 
let val loc = lookupEnv var env; 
    val codes1 = emitByte(LDC, ip, codes); 
    val codes2 = emitByte(Arg loc, ip + 1, codes1); 
    val (ip', codes3) = compExp(exp, env, ip+2, codes2); 
    val codes4 = emitByte(ADEALLOC, ip', codes3); 
    in(ip'+1, codes4, nil, contIP) 
    end; 

給出

hw4.sml:339.5-433.6錯誤:在圖案施加到參數非構造:DeallocComm hw4.sml:427.26-427.29錯誤:未結合的可變或構造函數:var

hw4.sml:430.31-430.34錯誤:未結合的可變或構造:EXP

ADEALLOC => let val (n, stack') = popStack stack 
val (loc, stack'') = popStack stack'; 
fun loop'(n, loc, store) = 
    val store' = updateTable (loc, defaultIntValue, store); 
    in loop'(n-1, loc+1, store) = 
    val store'' = loop'(n, loc, store) end; 
in loop(ip+1, store'', stack'') end; 

hw4.sml:612.14錯誤:語法錯誤:將EQUALOP

hw4.sml:615.8-615.11錯誤:語法錯誤:與END更換VAL

這些任何幫助,將不勝感激。

回答

0

因此對於第一個,我認爲它找不到構造函數DeallocComm。 (從哪裏申報?)

在第二個,這是沒有意義的。我不知道你在做什麼。 store'store''裏面的loop'函數還是在外?如果前者,那麼爲什麼它不在let之內呢?如果後者,loop'的身體在哪裏;以及如何在表達式中使用store'',這在函數的外部?另外,沒有值叫做loop。看起來你錯過了很多fun,let等東西。

1

你可以調用一個函數作爲參數傳遞給另一個函數,但是你做得不正確。正確的語法是在沒有參數或perentheses的情況下調用函數名稱,然後在傳遞函數的主體內使用作爲參數傳遞的函數。

所以,你會希望你的函數聲明爲:

compComm (DeallocComm, env, ip, codes, contIP)= 

,然後在正文中使用DeallocComm。現在,您正在創建一個具有值但沒有名稱的環境變量 - 在將傳遞給該函數之前,DeallocComm(var,exp)將計算

+0

@Crowbreak,試着給用戶更多的指導意見, – 2013-02-01 05:49:59

+0

對,對不起。謝謝! – Crowbeak 2013-03-29 01:59:44