如何用antlr比较两个代码?

问题描述

我有两个代码,我希望能够使用 antlr 看到它们相同的语法

String s1 = "public class Test { public static int add (int i,int j) { int g = i + j; return g;}}";
String s2 = "public class Essai { public static int add (int nb1,int nb2) {int nb3 = nb1 + nb2; return nb3;}}";

我通过 antlr 将字符串转换成树

public static Java8Parser.compilationunitContext getTree(String s) {
        CharStream cs = CharStreams.fromString(s);
        antlr4.Java8Lexer java8Lexer = new antlr4.Java8Lexer (cs);
        CommonTokenStream commonTokenStream = new CommonTokenStream(java8Lexer);
        antlr4.Java8Parser java8Parser = new antlr4.Java8Parser (commonTokenStream);
        Java8Parser.compilationunitContext tree = java8Parser.compilationunit();
        System.out.println(tree.toStringTree(java8Parser));
        return tree;
    }

我得到了两棵相似的树,但当然不完全相同

(compilationunit (typeDeclaration (classDeclaration (normalClassDeclaration (classModifier public) 
class Test (classBody { (classBodyDeclaration (classMemberDeclaration (methodDeclaration (methodModifier public) (methodModifier static) (methodHeader (result (unannType (unannPrimitiveType (numericType (integralType int))))) 
(methodDeclarator add ( (formalParameterList (formalParameters (formalParameter (unannType (unannPrimitiveType (numericType (integralType int)))) (variableDeclaratorId i))),(lastFormalParameter (formalParameter (unannType (unannPrimitiveType (numericType (integralType int)))) (variableDeclaratorId j)))) ))) 
(methodBody (block { (blockStatements (blockStatement (localVariableDeclarationStatement (localVariableDeclaration (unannType (unannPrimitiveType (numericType (integralType int)))) (variableDeclaratorList (variableDeclarator (variableDeclaratorId g) = (variableInitializer (expression (assignmentExpression (conditionalExpression (conditionalOrExpression (conditionalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (shiftExpression (additiveExpression (additiveExpression (multiplicativeExpression (unaryExpression (unaryExpressionNotPlusMinus (postfixExpression (expressionName i)))))) + (multiplicativeExpression (unaryExpression (unaryExpressionNotPlusMinus (postfixExpression (expressionName j))))))))))))))))))))) ;)) 
(blockStatement (statement (statementWithoutTrailingSubstatement (returnStatement return (expression (assignmentExpression (conditionalExpression (conditionalOrExpression (conditionalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (shiftExpression (additiveExpression (multiplicativeExpression (unaryExpression (unaryExpressionNotPlusMinus (postfixExpression (expressionName g))))))))))))))))) ;))))) }))))) })))) <EOF>)

(compilationunit (typeDeclaration (classDeclaration (normalClassDeclaration (classModifier public) 
class Essai (classBody { (classBodyDeclaration (classMemberDeclaration (methodDeclaration (methodModifier public) (methodModifier static) (methodHeader (result (unannType (unannPrimitiveType (numericType (integralType int))))) (methodDeclarator add ( (formalParameterList (formalParameters (formalParameter (unannType (unannPrimitiveType (numericType (integralType int)))) (variableDeclaratorId nb1))),(lastFormalParameter (formalParameter (unannType (unannPrimitiveType (numericType (integralType int)))) (variableDeclaratorId nb2)))) ))) 
(methodBody (block { (blockStatements (blockStatement (localVariableDeclarationStatement (localVariableDeclaration (unannType (unannPrimitiveType (numericType (integralType int)))) (variableDeclaratorList (variableDeclarator (variableDeclaratorId nb3) = (variableInitializer (expression (assignmentExpression (conditionalExpression (conditionalOrExpression (conditionalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (shiftExpression (additiveExpression (additiveExpression (multiplicativeExpression (unaryExpression (unaryExpressionNotPlusMinus (postfixExpression (expressionName nb1)))))) + (multiplicativeExpression (unaryExpression (unaryExpressionNotPlusMinus (postfixExpression (expressionName nb2))))))))))))))))))))) ;)) 
(blockStatement (statement (statementWithoutTrailingSubstatement (returnStatement return (expression (assignmentExpression (conditionalExpression (conditionalOrExpression (conditionalAndExpression (inclusiveOrExpression (exclusiveOrExpression (andExpression (equalityExpression (relationalExpression (shiftExpression (additiveExpression (multiplicativeExpression (unaryExpression (unaryExpressionNotPlusMinus (postfixExpression (expressionName nb3))))))))))))))))) ;))))) }))))) })))) <EOF>)

如何比较这两个代码并说除了不同的变量名称之外它们是相同的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)