问题描述
我有两个代码,我希望能够使用 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 (将#修改为@)