1

在 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.

任何想法,如何有效地做到这一点?

4

2 回答 2

4

也许你可以做的是写一个Stackand 为第一个语句从左到右移动,推动像VARthen ASSIGNMENT, then VAR, thenOPERATOR之类的值VAR

一旦你有了它,你就可以从第二个表达式开始,从右到左移动,每次比较你有什么和你从堆栈中弹出的内容。

您正在阅读的内容与您弹出的内容之间的任何不匹配都会产生false

于 2013-02-15T09:26:39.873 回答
1

使用LR 解析器(维基百科)解析表达式,因为它们可能是上下文无关语言。对于 Java,您可能想要使用例如CUP 开源解析器生成器

然后使用您最喜欢的树比较方法比较生成的语法树(维基百科) 。

有关常规语言和上下文无关语言的区别,请参见Chomsky Hierarchy (Wikipedia)

于 2013-02-15T09:28:47.473 回答