微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何用antlr比较两个代码?

如何解决如何用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 举报,一经查实,本站将立刻删除。