Я написал рекурсивную функцию в python для обхода AST, созданного с помощью JDT-компилятора, в Eclipse. Я бы прошел по AST-дереву, как это изображение: Это изображение Я получил левое дерево и написал эту функцию:
ast ='MethodDeclaration SimpleType SimpleName String SingleVariableDeclaration SimpleType SimpleName id SimpleName Integer Block ExpressionStatement MethodInvocation SimpleName Log SimpleName debug SimpleName Extracting_method_with_ID:{} SimpleName id ReturnStatement MethodInvocation SimpleName request SimpleName remove SimpleName id SimpleName extractFor'
def traverseTree(token,i):
if i == len(token)-1:
return ''
else:
i += 1
return '('+token[0]+traverseTree(token[1:],i)+')'
print traverseTree(astlist,0)
Это приводит к: (MethodDeclaration (SimpleType (SimpleName (String (SingleVariableDeclaration) (SimpleType (SimpleName (ID) (SimpleName (Integer (Block (ExpressionStatement (MethodInvocation (SimpleName (Log))))))))))))))))))))
Не то же самое, что правильное изображение, я запутался, я не могу обработать какую-либо строку или идентификатор, определенный пользователем, и поместить его в правильное место как правильный раздел на этом изображении Это изображение