2014-11-02 34 views
0

我有有條件的構造結接下來的三個例子IF在語言倍頻如何創建一個文法IF條件

1) 
    if(condition) 
     body 
    end 
2) 
    if(condition) 
     body 
    else 
     body-alternative 
    end 
3) 

    if(condition) 
     body 
    elseif(condition) 
     body 
    else 
     body-alternative 
    end 

在第三例可能有許多elseif's你想要

我必須爲這些If創建一個語法。到目前爲止,我的下一個規則

<IF> := if <CONDITION> <BODY> <S> 
<S> := end | else <BODY> end | <ELSEIF> 
<ELSEIF> := elseif <CONDITION> <BODY> <ELSEIF> | else <BODY> end 

但我不知道如何創建非終端條件的規則,任何想法?

回答

1

<CONDITION>只是括號內的<EXPRESSION>。 (表達式需要有一個布爾值,但這不是一個語法限制;任何表達式在語法上都是有效的。)

爲表達式創建語法很乏味,需要詳細的表達式語法知識(顯然),但它們是通常非常相似,所以你應該能夠在互聯網上找到任何數量的例子。

當然,你可以看看八度語法本身。它寫在bison,你可以在octave mercurial repository找到它。

順便說一句,這是不是從文件明顯你報價,以下是有效倍頻if語句:

if (condition) 
    body 
elseif (condition) 
    body-2 
end 

換句話說,if語句包含一個if條款,任何數字(包括0)elseif條款,可選else條款和end。有一個elseif子句這一事實並不意味着else子句是必需的。 (所以它就像只是其中有某種結束標誌終止if聲明所有其他語言。)

+0

謝謝@rici,最後一個問題,如果有(E-(B %4 * 3> 2))它會是一個有效的if語句(不僅在八度,但在其他語言)? – user3105533 2014-11-03 01:58:33

+0

@ user3105533:它在語法上是正確的,但在某些語言中它會出現類型錯誤。我不知道八度是否會接受它,但它會拒絕它在運行時,如果它拒絕它。 – rici 2014-11-03 02:18:39

0

您可以嘗試

if (the condition) 
    body 
elseif (the condition) 
    body second 
else 
    what you need 
end