├── README.md ├── javac.jar ├── Test.class ├── __pycache__ ├── checker.cpython-39.pyc ├── tokenizer.cpython-39.pyc └── translator.cpython-39.pyc ├── ScreenShots ├── Error-Braces misiing.png ├── Error-SemiColum missing.png └── For-While-if-ifelse-else.png ├── output.txt ├── code1.txt ├── code2.txt ├── temp.java ├── requirements.txt ├── checker.py ├── App.py ├── tokenizer.py └── translator.py /README.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /javac.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTaha012/Python-To-Java-Translator/HEAD/javac.jar -------------------------------------------------------------------------------- /Test.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTaha012/Python-To-Java-Translator/HEAD/Test.class -------------------------------------------------------------------------------- /__pycache__/checker.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTaha012/Python-To-Java-Translator/HEAD/__pycache__/checker.cpython-39.pyc -------------------------------------------------------------------------------- /ScreenShots/Error-Braces misiing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTaha012/Python-To-Java-Translator/HEAD/ScreenShots/Error-Braces misiing.png -------------------------------------------------------------------------------- /__pycache__/tokenizer.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTaha012/Python-To-Java-Translator/HEAD/__pycache__/tokenizer.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/translator.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTaha012/Python-To-Java-Translator/HEAD/__pycache__/translator.cpython-39.pyc -------------------------------------------------------------------------------- /ScreenShots/Error-SemiColum missing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTaha012/Python-To-Java-Translator/HEAD/ScreenShots/Error-SemiColum missing.png -------------------------------------------------------------------------------- /ScreenShots/For-While-if-ifelse-else.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AhmedTaha012/Python-To-Java-Translator/HEAD/ScreenShots/For-While-if-ifelse-else.png -------------------------------------------------------------------------------- /output.txt: -------------------------------------------------------------------------------- 1 | x=10 2 | for i in range(0,10,1): 3 | while (x!=3) or (x<5) : 4 | if x%2==0: 5 | print('even') 6 | elif x==2: 7 | print('equal') 8 | else: 9 | print('odd') 10 | -------------------------------------------------------------------------------- /code1.txt: -------------------------------------------------------------------------------- 1 | int f=0; 2 | for(int i=0;i<10;i++){ 3 | int x=0; 4 | if(x<10){ 5 | while(true){ 6 | int t=0; 7 | f=f+1; 8 | System.out.print(f); 9 | 10 | } 11 | 12 | } 13 | } -------------------------------------------------------------------------------- /code2.txt: -------------------------------------------------------------------------------- 1 | int x=10; 2 | for(int i=0;i<10;i++){ 3 | while((x!=3)||(x<5)){ 4 | if(x%2==0){ 5 | System.out.print("even"); 6 | } 7 | else if(x==2){ 8 | System.out.print("equal"); 9 | } 10 | else{ 11 | System.out.print("odd"); 12 | } 13 | } 14 | } 15 | 16 | 17 | -------------------------------------------------------------------------------- /temp.java: -------------------------------------------------------------------------------- 1 | class Test {public static void main(String[] args) { int x=10; 2 | for(int i=0;i<10;i++){ 3 | while((x!=3)||(x<5)) 4 | if(x%2==0){ 5 | System.out.print("even"); 6 | } 7 | else if(x==2){ 8 | System.out.print("equal"); 9 | } 10 | else{ 11 | System.out.print("odd"); 12 | } 13 | } 14 | } 15 | 16 | 17 | }} -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | altair==4.2.2 2 | attrs==23.1.0 3 | blinker==1.6.2 4 | cachetools==5.3.0 5 | certifi==2023.5.7 6 | charset-normalizer==3.1.0 7 | click==8.1.3 8 | colorama==0.4.6 9 | decorator==5.1.1 10 | docopt==0.6.2 11 | entrypoints==0.4 12 | gitdb==4.0.10 13 | GitPython==3.1.31 14 | idna==3.4 15 | importlib-metadata==6.6.0 16 | Jinja2==3.1.2 17 | joblib==1.2.0 18 | jsonschema==4.17.3 19 | markdown-it-py==2.2.0 20 | MarkupSafe==2.1.2 21 | mdurl==0.1.2 22 | nltk==3.8.1 23 | numpy==1.24.3 24 | packaging==23.1 25 | pandas==2.0.1 26 | Pillow==9.5.0 27 | pipreqs==0.4.13 28 | protobuf==3.20.3 29 | pyarrow==12.0.0 30 | pydeck==0.8.1b0 31 | Pygments==2.15.1 32 | Pympler==1.0.1 33 | pyrsistent==0.19.3 34 | python-dateutil==2.8.2 35 | pytz==2023.3 36 | regex==2023.5.5 37 | requests==2.30.0 38 | rich==13.3.5 39 | six==1.16.0 40 | smmap==5.0.0 41 | streamlit==1.22.0 42 | streamlit-ace==0.1.1 43 | tenacity==8.2.2 44 | toml==0.10.2 45 | toolz==0.12.0 46 | tornado==6.3.2 47 | tqdm==4.65.0 48 | typing_extensions==4.5.0 49 | tzdata==2023.3 50 | tzlocal==5.0.1 51 | urllib3==2.0.2 52 | validators==0.20.0 53 | watchdog==3.0.0 54 | yarg==0.1.9 55 | zipp==3.15.0 56 | -------------------------------------------------------------------------------- /checker.py: -------------------------------------------------------------------------------- 1 | import subprocess 2 | import os 3 | 4 | class checkError: 5 | def check_java_syntax(self,java_code): 6 | try: 7 | # Create a temporary Java file 8 | with open("temp.java", 'w') as file: 9 | file.write(java_code) 10 | #file.read('temp.java') 11 | # Compile the Java file using javac 12 | compile_process = subprocess.Popen(["javac","temp.java"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 13 | compile_output, compile_errors = compile_process.communicate() 14 | if compile_process.returncode == 0: 15 | # Compilation successful, syntax is correct 16 | return("Clear") 17 | else: 18 | return(compile_errors.decode()) 19 | except Exception as e: 20 | return(str(e)) 21 | def runChecker(self,code): 22 | startcode = '''class Test {public static void main(String[] args) { ''' 23 | return self.check_java_syntax(startcode+code+'}'+'}') 24 | def runCheckerOnFile(self,filepath): 25 | with open(filepath, encoding='UTF8') as f: 26 | contents = f.read() 27 | return self.runChecker(code=contents) 28 | 29 | 30 | -------------------------------------------------------------------------------- /App.py: -------------------------------------------------------------------------------- 1 | import streamlit as st 2 | from streamlit_ace import st_ace 3 | from translator import Translator 4 | from checker import checkError 5 | import nltk 6 | import re 7 | import os 8 | mainpath=os.path.dirname(os.path.abspath(__file__)) 9 | st.set_page_config(layout="wide") 10 | st.markdown('## Java To Python Translator') 11 | 12 | def trans(sentence): 13 | t=Translator() 14 | t.startTranslate(sentence=sentence) 15 | t.saveFile() 16 | return t.getTranslatedText() 17 | 18 | global filePath 19 | global c1 20 | global contents 21 | global index 22 | index=False 23 | filePath="" 24 | first,second,third=st.columns(3) 25 | with second: 26 | func=st.button("Translate") 27 | load=st.button("Load File And Translate") 28 | uploaded_file = st.file_uploader("Add text file !",type="txt") 29 | if uploaded_file: 30 | filePath=uploaded_file.name 31 | with first: 32 | st.markdown("Java Code") 33 | if load: 34 | with open(filePath, encoding='UTF8') as f: 35 | contents = f.read() 36 | c2=st_ace(language="java",value=contents,auto_update=True,height=350,font_size=16) 37 | check=checkError() 38 | if check.runChecker(c2)=="Clear": 39 | with third: 40 | st.markdown("Python Code") 41 | st_ace(value=trans(c2),language="python",readonly=True,height=350,font_size=16,auto_update=True) 42 | with second: 43 | st.success('Translated Done', icon="✅") 44 | st.text("Saved in output.txt") 45 | else: 46 | with second: 47 | st.error(check.runChecker(c2), icon="🚨") 48 | else: 49 | c1=st_ace(language="java",auto_update=True,height=350,font_size=16) 50 | 51 | if func: 52 | check=checkError() 53 | if check.runChecker(c1)=="Clear": 54 | with third: 55 | st.markdown("Python Code") 56 | st_ace(value=trans(c1),language="python",readonly=True,height=350,font_size=16,auto_update=True) 57 | with second: 58 | st.success('Translation Done', icon="✅") 59 | st.text("Saved in output.txt") 60 | else: 61 | with second: 62 | st.error(check.runChecker(c1), icon="🚨") 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /tokenizer.py: -------------------------------------------------------------------------------- 1 | import re 2 | from nltk.tokenize import word_tokenize 3 | 4 | class JavaCodeTokenizer: 5 | def __init__(self): 6 | self.operators = ['+', '-', '*', '/', '%', '++', '--', '==', '!=', '>', '<', '>=', '<=', '&&', '||', '!', '&', '|', '^', '~', '<<', '>>', '+=', '-=', '*=', '/=', '%=', '&=', '^=', '|=', '<<=', '>>=', '->', '::', '?', ':', '(', ')', '[', ']', '{', '}', ';', ':', ',', '=', '++'] 7 | self.keywords = ['break', 'byte', 'case', 'catch', 'char', 'class', 'const', 'default', 'do', 'else', 'enum', 'extends', 'final', 'finally', 'for', 'if', 'implements', 'import', 'interface', 'native', 'new', 'package', 'private', 'protected', 'public', 'return', 'static', 'this', 'throw' 8 | , 'throws', 'try', 'void', 'volatile', 'while','System.out.print','System.out.println,"else if'] 9 | self.types = ['boolean', 'byte', 'char', 'double', 'float', 'short', 'long', 'int'] 10 | 11 | def tokenize(self, code): 12 | tokens = self._split_tokens(word_tokenize(code)) 13 | if "true" in tokens: 14 | tokens[tokens.index("true")]="True" 15 | if "false" in tokens: 16 | tokens[tokens.index("false")]="False" 17 | token_types = self._get_token_types(tokens) 18 | token_list = list(zip(tokens, token_types)) 19 | return token_list 20 | 21 | def _split_tokens(self, tokens): 22 | split_tokens = [] 23 | for token in tokens: 24 | if token.endswith('++') or token.endswith('--'): 25 | split_tokens.append(token[:-2]) 26 | split_tokens.append(token[-2:]) 27 | elif token=='&': 28 | if split_tokens[-1]=='&': 29 | split_tokens[-1]='&&' 30 | else: 31 | split_tokens.append('&') 32 | elif token=='|': 33 | if split_tokens[-1]=='|': 34 | split_tokens[-1]='||' 35 | else: 36 | split_tokens.append('||') 37 | elif '==' in token : 38 | parts = token.split('==') 39 | for i, part in enumerate(parts): 40 | split_tokens.append(part) 41 | if i != len(parts) - 1: 42 | split_tokens.append('==') 43 | elif '=' in token : 44 | parts = token.split('=') 45 | for i, part in enumerate(parts): 46 | split_tokens.append(part) 47 | if i != len(parts) - 1: 48 | split_tokens.append('=') 49 | elif '+=' in token : 50 | parts = token.split('+=') 51 | for i, part in enumerate(parts): 52 | split_tokens.append(part) 53 | if i != len(parts) - 1: 54 | split_tokens.append('+=') 55 | elif '-=' in token : 56 | parts = token.split('-=') 57 | for i, part in enumerate(parts): 58 | split_tokens.append(part) 59 | if i != len(parts) - 1: 60 | split_tokens.append('-=') 61 | elif '*=' in token : 62 | parts = token.split('*=') 63 | for i, part in enumerate(parts): 64 | split_tokens.append(part) 65 | if i != len(parts) - 1: 66 | split_tokens.append('*=') 67 | elif '/=' in token : 68 | parts = token.split('/=') 69 | for i, part in enumerate(parts): 70 | split_tokens.append(part) 71 | if i != len(parts) - 1: 72 | split_tokens.append('/=') 73 | elif '+' in token : 74 | parts = token.split('+') 75 | for i, part in enumerate(parts): 76 | split_tokens.append(part) 77 | if i != len(parts) - 1: 78 | split_tokens.append('+') 79 | elif '-' in token : 80 | parts = token.split('-') 81 | for i, part in enumerate(parts): 82 | split_tokens.append(part) 83 | if i != len(parts) - 1: 84 | split_tokens.append('-') 85 | elif '*' in token : 86 | parts = token.split('*') 87 | for i, part in enumerate(parts): 88 | split_tokens.append(part) 89 | if i != len(parts) - 1: 90 | split_tokens.append('*') 91 | elif '/' in token : 92 | parts = token.split('/') 93 | for i, part in enumerate(parts): 94 | split_tokens.append(part) 95 | if i != len(parts) - 1: 96 | split_tokens.append('/') 97 | else: 98 | split_tokens.append(token) 99 | return split_tokens 100 | def _get_token_types(self, tokens): 101 | token_types = [] 102 | for token in tokens: 103 | token_type = self._classify_token(token) 104 | token_types.append(token_type) 105 | return token_types 106 | 107 | def _get_token_types(self, tokens): 108 | token_types = [] 109 | for token in tokens: 110 | token_type = self._classify_token(token) 111 | token_types.append(token_type) 112 | return token_types 113 | def _classify_token(self, token): 114 | if token in self.operators: 115 | return 'OPERATOR' 116 | elif token in self.keywords: 117 | return 'KEYWORD' 118 | elif token in self.types: 119 | return 'TYPE' 120 | elif re.match(r'[A-Za-z]+\d*', token): 121 | return 'IDENTIFIER' 122 | elif re.match(r'\d+\.\d+|\d+',token): 123 | return 'DIGIT' 124 | else: 125 | return 'OTHER' 126 | def RunTokenizer(self,code=None,filepath=None,use_Txt=False): 127 | if use_Txt: 128 | assert filepath!=None 129 | with open(filepath, encoding='UTF8') as f: 130 | java_code = f.read() 131 | else: 132 | java_code=code 133 | token_list = self.tokenize(java_code) 134 | 135 | tokenized_list = [] 136 | for token in token_list: 137 | if token[0] in self.keywords: 138 | tokenized_list.append((token[0], "keyWord")) 139 | elif token[0] in self.types: 140 | tokenized_list.append((token[0], "type")) 141 | elif re.match(r'\w+\+\w+', token[0]): 142 | tokenized_list.append((token[0][0], "identifer")) 143 | tokenized_list.append(('+', "operator")) 144 | if re.match(r'\d+\.\d+|\d+',token[0][2]): 145 | tokenized_list.append((token[0][2], "digit")) 146 | else: 147 | tokenized_list.append((token[0][2], "identifer")) 148 | elif re.match(r'\w+\-\w+', token[0]): 149 | tokenized_list.append((token[0][0], "identifer")) 150 | tokenized_list.append(('-', "operator")) 151 | if re.match(r'\d+\.\d+|\d+',token[0][2]): 152 | tokenized_list.append((token[0][2], "digit")) 153 | else: 154 | tokenized_list.append((token[0][2], "identifer")) 155 | elif re.match(r'\w+\*\w+', token[0]): 156 | tokenized_list.append((token[0][0], "identifer")) 157 | tokenized_list.append(('*', "operator")) 158 | if re.match(r'\d+\.\d+|\d+',token[0][2]): 159 | tokenized_list.append((token[0][2], "digit")) 160 | else: 161 | tokenized_list.append((token[0][2], "identifer")) 162 | elif re.match(r'\w+\/\w+', token[0]): 163 | tokenized_list.append((token[0][0], "identifer")) 164 | tokenized_list.append(('/', "operator")) 165 | if re.match(r'\d+\.\d+|\d+',token[0][2]): 166 | tokenized_list.append((token[0][2], "digit")) 167 | else: 168 | tokenized_list.append((token[0][2], "identifer")) 169 | elif re.match(r'[A-Za-z]+\d*', token[0]): 170 | tokenized_list.append((token[0], "identifier")) 171 | elif re.match(r'\d+\.?\d*', token[0]): 172 | tokenized_list.append((token[0], "digit")) 173 | elif token[0] in self.operators: 174 | tokenized_list.append((token[0], "operator")) 175 | else: 176 | tokenized_list.append((token, 'other')) 177 | return tokenized_list 178 | 179 | 180 | 181 | 182 | 183 | -------------------------------------------------------------------------------- /translator.py: -------------------------------------------------------------------------------- 1 | import nltk 2 | import re 3 | from checker import checkError 4 | from tokenizer import JavaCodeTokenizer 5 | class Translator: 6 | def __init__(self): 7 | self.listOfTokens=[] 8 | self.pointer=0 9 | self.indentCounter=0 10 | self.indent=' ' 11 | self.translatedText=[] 12 | def getTranslatedText(self): 13 | return "".join(self.translatedText) 14 | def getNextToken(self): 15 | self.pointer=self.pointer+1 16 | assert self.pointer=0 20 | return self.listOfTokens[self.pointer] 21 | def prevToken(self): 22 | self.pointer=self.pointer-1 23 | assert self.pointer>0 24 | return self.listOfTokens[self.pointer] 25 | def setPointer(self, value): 26 | self.pointer=value 27 | def setListOfTokens(self,value): 28 | assert type(value)==list 29 | self.listOfTokens=value 30 | def checkLastToken(self): 31 | if self.pointer==len(self.listOfTokens)-1: 32 | return True 33 | else: 34 | return False 35 | def getListOfTokens(self): 36 | return self.listOfTokens 37 | def runFor(self): 38 | self.setPointer(self.pointer+1) 39 | if self.getToken()[0]=="(" : 40 | self.setPointer(self.pointer+1) 41 | if self.getToken()[1]=="identifier" or self.getToken()[1]=="type": # whether i=0 or int i=0 42 | if self.getToken()[1]=="type": 43 | self.setPointer(self.pointer+1) 44 | id1=self.getToken()[0] 45 | self.setPointer(self.pointer+1) 46 | if self.getToken()[0]=="=" : 47 | self.setPointer(self.pointer+1) 48 | if self.getToken()[1]=="digit": 49 | id2=self.getToken()[0] 50 | self.setPointer(self.pointer+1) 51 | if self.getToken()[0]==";": 52 | self.setPointer(self.pointer+1) 53 | if self.getToken()[1]=="identifier": 54 | self.setPointer(self.pointer+1) 55 | if self.getToken()[0]=="<" or self.getToken()[0]=='>': 56 | self.setPointer(self.pointer+1) 57 | if self.getToken()[1]=="digit" or self.getToken()[1]=="identifier": 58 | id3=self.getToken()[0] #for id1 in range(0,10 59 | self.setPointer(self.pointer+1) 60 | if self.getToken()[0]==";": 61 | self.setPointer(self.pointer+1) 62 | if self.getToken()[1]=="identifier": 63 | id4=1 64 | self.setPointer(self.pointer+1) 65 | if self.getToken()[0]=="++": #if we get ++ 66 | id4=1 #for id1 in range(0,10,1) 67 | self.getNextToken() 68 | elif self.getToken()[0]=="--": #if we get -- 69 | id4=-1 70 | self.getNextToken() 71 | elif self.getToken()[0]=="=": #if we get i= 72 | self.setPointer(self.pointer+2) 73 | #case =i+1 74 | if self.getToken()[0]=='+': 75 | self.setPointer(self.pointer+1) 76 | id4=self.getToken()[0] 77 | #case =i-1 78 | elif self.getToken()[0]=='-': 79 | self.setPointer(self.pointer+1) 80 | id4='-'+self.getToken()[0] 81 | self.getNextToken() 82 | if self.getToken()[0]==")": 83 | self.translatedText.append(self.indent*self.indentCounter+"for "+id1+" in range("+str(id2)+","+str(id3)+","+str(id4)+"):\n") 84 | self.getNextToken() 85 | if self.getToken()[0]=="{": 86 | self.indentCounter+=1 87 | self.getNextToken() 88 | elif self.getToken()[0]==")": 89 | self.translatedText.append(self.indent*self.indentCounter+"for "+id1+" in range("+str(id2)+","+str(id3)+"):\n") 90 | self.getNextToken() 91 | if self.getToken()[0]=="{": 92 | self.indentCounter+=1 93 | self.getNextToken() 94 | 95 | def runIf(self): 96 | self.getNextToken() 97 | bracketCounter=0 98 | outputString='' 99 | if self.getToken()[0]=="(" and self.getToken()[1]=="operator": 100 | outputString+=self.indent*self.indentCounter+'if ' 101 | self.getNextToken() 102 | bracketCounter+=1 103 | while bracketCounter !=0: 104 | if self.getToken()[0]=='&&': 105 | outputString+=' and ' 106 | elif self.getToken()[0]=='||': 107 | outputString+=' or ' 108 | elif self.getToken()[1]=='operator' and self.getToken()[0]!='&&' and self.getToken()[0]!='||' and self.getToken()[0]!=')' and self.getToken()[0]!='(': 109 | outputString+=self.getToken()[0] 110 | if self.getToken()[0]=='(': 111 | bracketCounter+=1 112 | if bracketCounter>1: 113 | outputString+='(' 114 | if self.getToken()[0]==')': 115 | bracketCounter=bracketCounter-1 116 | if bracketCounter!=0: 117 | outputString+=') ' 118 | if self.getToken()[1]=='identifier': 119 | outputString+=self.getToken()[0] 120 | if self.getToken()[1]=='digit': 121 | outputString+=self.getToken()[0] 122 | self.getNextToken() 123 | outputString+=':' 124 | if self.getToken()[0]=='{': 125 | self.indentCounter+=1 126 | outputString+='\n' 127 | self.getNextToken() 128 | self.translatedText.append(outputString) 129 | def runElseIf(self): 130 | self.getNextToken() 131 | bracketCounter=0 132 | outputString='' 133 | if self.getToken()[0]=="(" and self.getToken()[1]=="operator": 134 | outputString+=self.indent*self.indentCounter+'elif ' 135 | self.getNextToken() 136 | bracketCounter+=1 137 | while bracketCounter !=0: 138 | if self.getToken()[0]=='&&': 139 | outputString+=' and ' 140 | elif self.getToken()[0]=='||': 141 | outputString+=' or ' 142 | elif self.getToken()[1]=='operator' and self.getToken()[0]!='&&' and self.getToken()[0]!='||' and self.getToken()[0]!=')' and self.getToken()[0]!='(': 143 | outputString+=self.getToken()[0] 144 | if self.getToken()[0]=='(': 145 | bracketCounter+=1 146 | if bracketCounter>1: 147 | outputString+='(' 148 | if self.getToken()[0]==')': 149 | bracketCounter=bracketCounter-1 150 | if bracketCounter!=0: 151 | outputString+=') ' 152 | if self.getToken()[1]=='identifier': 153 | outputString+=self.getToken()[0] 154 | if self.getToken()[1]=='digit': 155 | outputString+=self.getToken()[0] 156 | self.getNextToken() 157 | outputString+=':' 158 | if self.getToken()[0]=='{': 159 | self.indentCounter+=1 160 | outputString+='\n' 161 | self.getNextToken() 162 | self.translatedText.append(outputString) 163 | def runWhile(self): 164 | self.getNextToken() 165 | bracketCounter=0 166 | outputString='' 167 | if self.getToken()[0]=="(" and self.getToken()[1]=="operator": 168 | outputString+=self.indent*self.indentCounter+'while ' 169 | self.getNextToken() 170 | bracketCounter+=1 171 | while bracketCounter !=0: 172 | if self.getToken()[0]=='&&': 173 | outputString+=' and ' 174 | elif self.getToken()[0]=='||': 175 | outputString+=' or ' 176 | elif self.getToken()[1]=='operator' and self.getToken()[0]!='&&' and self.getToken()[0]!='||' and self.getToken()[0]!=')' and self.getToken()[0]!='(': 177 | outputString+=self.getToken()[0] 178 | if self.getToken()[0]=='(': 179 | bracketCounter+=1 180 | if bracketCounter>1: 181 | outputString+='(' 182 | if self.getToken()[0]==')': 183 | bracketCounter=bracketCounter-1 184 | if bracketCounter!=0: 185 | outputString+=') ' 186 | if self.getToken()[1]=='identifier': 187 | outputString+=self.getToken()[0] 188 | if self.getToken()[1]=='digit': 189 | outputString+=self.getToken()[0] 190 | self.getNextToken() 191 | outputString+=':' 192 | if self.getToken()[0]=='{': 193 | self.indentCounter+=1 194 | outputString+='\n' 195 | self.getNextToken() 196 | self.translatedText.append(outputString) 197 | def runElse(self): 198 | self.getNextToken() 199 | if self.getToken()[0]=="if": 200 | return self.runElseIf() 201 | outputString='' 202 | outputString+=self.indent*self.indentCounter+'else:' 203 | if self.getToken()[0]=='{': 204 | self.indentCounter+=1 205 | outputString+='\n' 206 | self.getNextToken() 207 | self.translatedText.append(outputString) 208 | def runAssignStmt(self): 209 | outputString='' 210 | if self.getToken()[1]=="type": 211 | savedType=self.getToken()[0] 212 | self.getNextToken() 213 | while True: 214 | if self.getToken()[0]!=";": 215 | if self.getToken()[1]!="other": 216 | outputString+=self.getToken()[0] 217 | self.getNextToken() 218 | else: 219 | break 220 | self.translatedText.append(self.indent*self.indentCounter+outputString+"\n") 221 | if self.checkLastToken()==False: 222 | self.getNextToken() 223 | def runCloseBraces(self): 224 | self.indentCounter-=1 225 | self.getNextToken() 226 | def runPrint(self): 227 | self.getNextToken() 228 | self.getNextToken() 229 | if self.getToken()[1]=="identifier": 230 | outputString=f"print({str(self.getToken()[0])})" 231 | self.getNextToken() 232 | self.getNextToken() 233 | else: 234 | self.getNextToken() 235 | outputString=f"print('{str(self.getToken()[0])}')" 236 | self.getNextToken() 237 | self.getNextToken() 238 | self.getNextToken() 239 | self.translatedText.append(self.indent*self.indentCounter+outputString+"\n") 240 | if self.checkLastToken()==False: 241 | self.getNextToken() 242 | def runTranslate(self): 243 | if self.getToken()[0]=="while" and self.getToken()[1]=="keyWord": 244 | self.runWhile() 245 | return self.run() 246 | elif self.getToken()[0]=="if" and self.getToken()[1]=="keyWord": 247 | self.runIf() 248 | return self.run() 249 | elif self.getToken()[0]=="for" and self.getToken()[1]=="keyWord": 250 | self.runFor() 251 | return self.run() 252 | elif self.getToken()[0]=="else" and self.getToken()[1]=="keyWord": 253 | self.runElse() 254 | return self.run() 255 | elif self.getToken()[0]=="System.out.println" or self.getToken()[0]=="System.out.print": 256 | self.runPrint() 257 | return self.run() 258 | elif self.getToken()[1]=="identifier" or self.getToken()[1]=="type": 259 | self.runAssignStmt() 260 | return self.run() 261 | elif self.getToken()[0]=="}" and self.getToken()[1]=="operator": 262 | self.runCloseBraces() 263 | return self.run() 264 | else: 265 | return 266 | def run(self): 267 | if self.checkLastToken()==True: 268 | return 269 | else: 270 | return self.runTranslate() 271 | def startTranslate(self,sentence=None,filepath=None,useTxt=False): 272 | tokenizer = JavaCodeTokenizer() 273 | if useTxt: 274 | tokinzedList=tokenizer.RunTokenizer(filepath=filepath,use_Txt=True) 275 | else: 276 | tokinzedList=tokenizer.RunTokenizer(code=sentence) 277 | self.setListOfTokens(tokinzedList) 278 | self.setPointer(0) 279 | self.run() 280 | def showTranslatedText(self): 281 | print(self.getTranslatedText()) 282 | def saveFile(self,outputPath="output.txt"): 283 | with open(outputPath,'w') as f: 284 | f.write(self.getTranslatedText()) 285 | 286 | 287 | 288 | 289 | # if __name__ == "__main__": 290 | # t=Translator() 291 | # # tokens =["while","(","(","x","<","10",")","||","(","y","<","5",")",")","{",'if','(','(','f','<','80',")",')','{','var8','=','9',';',"}","i","=","10",";","var5","=","50",";","}",'while','(','gigi','>','18',')','{','int','f','=','18',';','}'] 292 | # # tokens=["for","(","var1","=","50",';','i','<','200',';','i','=','i','+','2',')','{','while','(','False',')','{','int','c','=','c','+','1',';','}',"for","(","var6","=","50",';','i','<','200',';',')','{','j','=','100',';','}',"}"] 293 | # # sentence = """ 294 | # # while((var1&&var2)){ 295 | # # for(int i=0;i<10;i++){ 296 | # # boolean state = True; 297 | # # System.out.print("hello"); 298 | # # } 299 | # # int x = 15; 300 | # # }""" 301 | # parser = argparse.ArgumentParser() 302 | # parser.add_argument("-f","--filepath", help="select txt file in folder",type=str) 303 | # args = parser.parse_args() 304 | # ce=checkError() 305 | # if ce.runCheckerOnFile(args.filepath)=="Clear": 306 | # print("Translated Succesfulyyy and saved in output.txt") 307 | # t.startTranslate(filepath=args.filepath,useTxt=True) 308 | # t.saveFile() 309 | # else: 310 | # print(ce.runCheckerOnFile(args.filepath)) 311 | # # t.showTranslatedText() 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | --------------------------------------------------------------------------------