2016-03-24 60 views
1

我的意思是這樣是否有BNF與參數

LISTOF(EL) := "[" EL ("," EL)* "]" 
LISTNUM := LISTOF(NUMBER) 
LISTID := LISTOF(IDENT) 

所以任何修改,以定義

NUMBER := ('0'-'9')* 
IDENT := ('a'-'z'|'A'-'Z')* 

,我們有以下

[435,657,44]是例子LISTNUM

[dsf,thg,ewre]是的示例。

或者另一個例子中(E表示空字符串)

A(0) := e 
A(n) := "a" A(n-1) | e 

所以,A(5)被設置的所有字符串的包括 'A' 與長度不超過5

是否有任何科學描述與此相似的作品?我們能否以這種方式描述我們的語法,並且仍然能夠在可接受的時間內解析它?

+1

當然你*可以*做到這一點。一種簡單的方法是將參數化的BNF規則作爲宏來處理,並簡單地將它們擴展爲傳統的BNF。問題是*你應該這樣做嗎?額外的表現力在實踐中爲你購買什麼?我建立了很多語法;我不這麼認爲。因人而異。 –

回答

0

常用的元語法如Bnf,Abnf和Ebnf沒有參數化規則。然而Iso Ebnf是可以根據標準擴展的。如果我沒有記錯,標準實際上顯示了一個引入參數的例子。

您可以免費得到標準here