| import ast, astor, javalang | |
| class CodeConverter: | |
| def python_to_java(self,code): | |
| try: t=ast.parse(code) | |
| except: return "// parse error\n"+code | |
| out=["public class Converted {"," public static void main(String[] args) {"] | |
| for n in t.body: | |
| if isinstance(n,ast.Expr) and isinstance(n.value,ast.Call) and getattr(n.value.func,'id','')=='print': | |
| args=", ".join(astor.to_source(a).strip() for a in n.value.args) | |
| out.append(f" System.out.println({args});") | |
| out.append(" }"); out.append("}") | |
| return "\n".join(out) | |
| def java_to_python(self,code): | |
| out=["# Converted from Java"] | |
| try: tree=javalang.parse.parse(code) | |
| except: return "# parse error\n"+code | |
| for _,m in tree.filter(javalang.tree.MethodDeclaration): | |
| out.append(f"def {m.name}():\n pass") | |
| return "\n".join(out) | |
| def convert(self,code,src,tgt): | |
| s,t=src.lower(),tgt.lower() | |
| if s=='python' and t=='java': return self.python_to_java(code) | |
| if s=='java' and t=='python': return self.java_to_python(code) | |
| return code | |