java中字符串的语法匹配

时间:2013-02-15 09:22:57

标签: java string syntax string-matching

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

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

2 个答案:

答案 0 :(得分:4)

也许您可以做的就是写一个Stack并且第一个语句从左向右移动,推送VAR然后ASSIGNMENT,然后是VAR等值,然后OPERATOR然后VAR

一旦你有了这个,你可以从第二个表达开始,然后从从右到左,每次比较你从堆栈中弹出的内容。

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

答案 1 :(得分:1)

使用LR-parser (Wikipedia)来解析表达式,因为它们可能是无上下文的语言。对于Java,您可能希望使用例如CUP open-source parser generator

然后使用您喜欢的树比较方法比较得到的syntax trees (Wikipedia)

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