在 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 中,我想编写一个语法匹配器。
为了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
and 为第一个语句从左到右移动,推动像VAR
then ASSIGNMENT
, then VAR
, thenOPERATOR
之类的值VAR
。
一旦你有了它,你就可以从第二个表达式开始,从右到左移动,每次比较你有什么和你从堆栈中弹出的内容。
您正在阅读的内容与您弹出的内容之间的任何不匹配都会产生false
。
使用LR 解析器(维基百科)解析表达式,因为它们可能是上下文无关语言。对于 Java,您可能想要使用例如CUP 开源解析器生成器。
然后使用您最喜欢的树比较方法比较生成的语法树(维基百科) 。
有关常规语言和上下文无关语言的区别,请参见Chomsky Hierarchy (Wikipedia)。