在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