在Java中,我想寫一個語法匹配器。java中字符串的語法匹配
對於string1: a = a+b, and string2: c = c+d, syntax_matcher(string1,string2) = true.
然而,if string1 : a > 0; string2 : c == 0, syntax_matcher(string1,string2) = false.
任何想法,如何做到這一點有效?
在Java中,我想寫一個語法匹配器。java中字符串的語法匹配
對於string1: a = a+b, and string2: c = c+d, syntax_matcher(string1,string2) = true.
然而,if string1 : a > 0; string2 : c == 0, syntax_matcher(string1,string2) = false.
任何想法,如何做到這一點有效?
也許你能做些什麼是寫一個Stack
和第一個語句移動由左到右,推動價值觀像VAR
然後ASSIGNMENT
,然後VAR
,然後OPERATOR
然後VAR
。
一旦你有了這個,你可以開始第二個表達式,並從從右到左,每次比較你有什麼和你從堆棧中彈出。
您正在閱讀的內容與您彈出的內容之間的任何不匹配情況將產生false
。
使用LR-parser (Wikipedia)解析表達式,因爲它們可能是上下文無關語言。對於Java,您可能想要使用例如CUP open-source parser generator。
然後使用您最喜歡的樹比較方法比較產生的syntax trees (Wikipedia)。
請參閱Chomsky Hierarchy (Wikipedia)以區分常規和上下文無關語言。
用你的匹配器方法創建一個自定義類,覆蓋你的需求的equals方法。 – AurA 2013-02-15 09:25:03
@PremGenError Regex不會解決CFG問題。 – Shivam 2013-02-15 09:25:10
@ShivamKalra CFG ?? – PermGenError 2013-02-15 09:25:49