java中字符串的语法匹配

java中字符串的语法匹配,java,string,syntax,string-matching,Java,String,Syntax,String Matching,在Java中,我想编写一个语法匹配器 对于string1:a=a+b和string2:c=c+d,语法匹配器(string1,string2)=true。 但是,如果string1:a>0;string2:c==0,语法匹配器(string1,string2)=false。 有什么想法,如何有效地做到这一点吗?也许你能做的就是编写一个堆栈,对于第一个语句,从左到右移动,按下像VAR这样的值,然后按下ASSIGNMENT,然后按下VAR,然后按下OPERATOR然后按下VAR 一旦有了这个表达式,

在Java中,我想编写一个语法匹配器

对于
string1:a=a+b和string2:c=c+d,语法匹配器(string1,string2)=true。

但是,如果string1:a>0;string2:c==0,语法匹配器(string1,string2)=false。


有什么想法,如何有效地做到这一点吗?

也许你能做的就是编写一个
堆栈,对于第一个语句,从左到右移动,按下像
VAR
这样的值,然后按下
ASSIGNMENT
,然后按下
VAR
,然后按下
OPERATOR
然后按下
VAR

一旦有了这个表达式,您就可以开始第二个表达式,并从右向左移动,每次比较您拥有的内容和从堆栈中弹出的内容


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

也许您可以做的是编写一个
堆栈
,对于第一条语句,从左到右移动,推送值,如
VAR
然后
赋值
,然后
VAR
,然后是
操作员
然后是
VAR

一旦有了这个表达式,您就可以开始第二个表达式,并从右向左移动,每次比较您拥有的内容和从堆栈中弹出的内容

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

使用a来解析表达式,因为它们可能是一种与上下文无关的语言。对于Java,您可能需要使用,例如

然后使用您最喜欢的树比较方法比较结果

有关常规语言和上下文无关语言的区别,请参见。

使用a解析表达式,因为它们可能是上下文无关语言。对于Java,您可能需要使用,例如

然后使用您最喜欢的树比较方法比较结果


有关常规语言和上下文无关语言的区别,请参阅。

使用matcher方法创建自定义类,重写equals方法以满足您的要求。@PremGenError Regex无法解决其CFG问题。您是否匹配语句的“程序结构”?如果是,那么您可能需要将文本解析为一个抽象语法树并进行比较。不过,这可能有点过头了。@PremGenError上下文无关语法。可能是:/@PremGenError上下文无关语法:)使用匹配器方法创建自定义类,根据需要重写equals方法。@PremGenError Regex无法解决其CFG问题。是否匹配语句的“程序结构”?如果是,那么您可能需要将文本解析为一个抽象语法树并进行比较。不过,这可能有点过头了。@PremGenError上下文无关语法。可能是:/@PremGenError上下文无关语法:)对于
a=a+b*c
d=b*c+d
可能会失败。这两种语法都是相同的。@Shivamkara:如果让它足够通用(只需
VAR
OPERATOR
),它就不会在这种情况下失败。可能会在
a=a+b*c
d=b*c+d
中失败。这两种语法都是相同的。@Shivamkara:如果让它足够通用(只需
VAR
OPERATOR
),那么在这种情况下它应该不会失败。