2015-04-15 49 views
0

我試着寫類似條件語句的簡單表達EBNF規範中的if語句測試,例如:aaa = "xxx"aaa != "xxx" AND bbb = "yyy"或更復雜的帶括號像aaa = "xxx" AND bbb = "yyy" AND (ccc = "zzz" OR ddd = "www")EBNF簡單條件

的規格我到目前爲止是這樣的,我的問題 - 是正確的?

<cond> ::= <id> <rel_op> <value> 
    | <cond> <op> <cond> 
    | "(" <cond> ")" 

<op> ::= AND 
    | OR 

<rel_op> ::= "=" 
    | "!=" 

<value> ::= <quot> <char>* <quot> 

<quot> ::= " 

側面說明 - 我是新來的E/BNF和規劃上實現基於本說明書的C#語法分析器,以取代舊的解析器是意大利麪條一樣和臭。

回答

0

這是我想出了,而且還成功地實施:

<cond> := <rel_cond> {<op> <cond>} 
    | <parenth_cond> {<op> <cond>} 

<rel_cond> := <id> <rel_op> <value> 

<rel_op> := "=" | "!=" | "~" | "!~" 

<parenth_cond> := "(" <cond> ")" 

<op> := AND | OR 

<id> := <char>* 

<value> := <quot> <char>* <quot> 

<quot> := "