我對編譯器的工作原理有粗略的理解(我的意思是語言,語法,詞法分析,解析等)。規則引擎具有各種規則和相關的操作,就像您在語法中有規則一樣,您可以在解析器生成器工具(如ANTLR)中將操作與它們關聯起來。所以我對如何區分這兩者有點困惑。誰能給出一個更明確,更正式的解釋差異?在編譯器中如何解析階段與規則引擎不同?
謝謝, Abhinav。
我對編譯器的工作原理有粗略的理解(我的意思是語言,語法,詞法分析,解析等)。規則引擎具有各種規則和相關的操作,就像您在語法中有規則一樣,您可以在解析器生成器工具(如ANTLR)中將操作與它們關聯起來。所以我對如何區分這兩者有點困惑。誰能給出一個更明確,更正式的解釋差異?在編譯器中如何解析階段與規則引擎不同?
謝謝, Abhinav。
規則引擎有一個事實數據庫和一組可以檢查數據庫元素並修改,插入或刪除事實的規則。通常,數據庫由相當於一組標記結構(T V1 V2 ... Vn)組成,每個標記結構具有不同類型的值V_i。規則通常是一種模式,規定如果一組結構實例具有屬性[對這些結構的值有一些條件,這可能是連接的或分離的],一個或多個匹配結構的值被改變,或者刪除一個匹配的結構,或者插入一個具有一些計算出來的值的新結構。一個非常複雜的規則引擎將規則視爲這種結構,因此也可以插入和刪除規則,但這非常不尋常。規則引擎(有效,而這是困難的部分)確定哪一組規則可以在任何時刻匹配,選擇一個並反覆執行。這個想法的價值在於,可以有一個任意的「事實」桶(每個都用標記結構表示),它們大致是獨立的,還有一組類似的獨立規則,並將它們統一地集中在一起。希望定義代表世界各個方面的結構很容易,並且更容易定義規則來操縱它們。這是一種編碼大量不同知識的方式,這就是爲什麼「業務」人喜歡他們。 (這個想法來自AI世界)。
編譯器解析器有兩個任務糾纏在一個活動中:1)決定輸入的文本流(分解爲語言標記)是否是特定編程語言的合法實例; 2)如果是,則構造編譯器數據結構通常是抽象語法樹和符號表),它們代表程序,以便編譯器的其餘部分可以生成代碼。編譯器人員花了大約50年的時間研究如何快速實現這一目標,並使用非常專業的算法(例如LALR解析器生成器,每個語法規則使用定製編碼操作)來完成工作。我們可以用一個規則引擎來實現一個編譯器 - 解析器,您需要一個由令牌流組成的數據類型以及與AST節點和符號表條目相對應的其他數據類型。編碼解析器可能會比較困難,並且不太可能接近編譯器解析器的速度,這就是爲什麼沒有人這樣做。
您不能使用編譯器解析器來實現規則引擎句點。所以,規則引擎更加強大。
謝謝,艾拉。這是一個非常全面和明確的答案,它清除了我的懷疑:) – abhinav 2010-05-06 10:34:54
目前還不清楚你的問題中「規則引擎」的含義。你能詳細說明一下嗎? – 2010-05-06 08:33:37
通過規則引擎我的意思是這樣的:http://en.wikipedia.org/wiki/Business_rules_engine ...一個例子http://java-source.net/open-source/rule-engines – abhinav 2010-05-06 08:37:47