4
我爲非常簡單的規則語言創建了一個正式的規範,非常簡單。 我想使用EBNF,因爲這是一個標準,但我不知道如何指定操作的順序。這是目前的規格。Extended Backus-Naur表單操作順序
rule = statement, { (‘AND’|’OR’), statement};
variable = ‘$’,alphabetic character, {alphabetic character | digit};
statement = variable, [ ‘count’,[white space ],’>’,[white space],number ];
alphabetic character = "A" | "B" | "C" | "D" | "E" | "F" | "G"
| "H" | "I" | "J" | "K" | "L" | "M" | "N"
| "O" | "P" | "Q" | "R" | "S" | "T" | "U"
| "V" | "W" | "X" | "Y" | "Z" ;
number = [ "-" ] , digit , { digit } ;
digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
white space = ? white space characters ? ;
我的問題是如何顯示括號中的內容應該先評估。 因此,像這樣
$strap AND ($greenSticker count > 5 OR ($greenSticker AND $redSticker))
這似乎是一個共同的特點,以大多數語言,但我的谷歌技能沒有我,我似乎無法找到一個例子。
在表達語法規則的優先順序時,我看不出爲什麼要區分自上而下和自下而上的解析。正如你所說的,這完全是關於生成正確的分析樹,而你只是構建自頂向下或自底向上,最終達到相同的結果。當然這有一些含義,但對於我來說,如何將解析技術與這種優先級相關聯並不明顯。請解釋。 – Gunther 2012-03-30 08:42:47
該表達式語法也可以在自下而上的解析器中工作,也可以在自上而下的LL解析器中工作,而不僅僅用於遞歸下降解析器。普拉特解析器也是遞歸下降和自上而下的。你的第二段對我來說確實沒有任何意義。 – EJP 2012-04-05 01:26:57
爲了解決您的兩個問題,我剛剛刪除了令人困惑的段落。我希望我的答案的其餘部分是有益的! – 2012-04-05 02:31:43