Java - Assembly Derleyecisi

Asm komutlarini okuyup derleyebilen, hatali kodlarda kullaniciya hatali bilgi mesaji verebilen Java tarafinda gorsel arayuz kullanarak gelistirmis oldugumuz bir derleyicidir. Hashmap icin guzel bir ornek olabilecegini dusunuyorum...
Kullanilan Kutuphaneler ;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.swing.JOptionPane;
Projenin Kaynak Kodlari ;
public class Assembly_Compiler extends javax.swing.JFrame {
public Assembly_Compiler() {
initComponents();
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
jFileChooser1.showOpenDialog(null);
jTextField1.setText(jFileChooser1.getSelectedFile().toString());
}
int d=0;
private void cozumle(String equ)
{if (equ.trim().length() != 0){ if(equ.indexOf("ORG")!=-1) { d = Integer.parseInt((equ.substring(equ.lastIndexOf("ORG")+4)), 16); } else{ String[] dgr= equ.split(" |:"); String k=dgr<0>
; list3.add(Integer.toHexString(d)); if(null!=hafiza_adresleyen(dgr<0>
)) { if(null!=simge_cetveli(dgr<1>
)) list4.add(Integer.toHexString(((Integer.parseInt((hafiza_adresleyen(dgr<0>
)),16))+(Integer.parseInt((simge_cetveli(dgr<1>
)),16))))); else list4.add(Integer.toHexString(((Integer.parseInt((hafiza_adresleyen(dgr<0>
)),16))+(Integer.parseInt((simge_cetveli_etiket(dgr<1>
)),16))))); } else if(null!=hafiza_adreslemeyen(dgr<0>
)) list4.add(hafiza_adreslemeyen(dgr<0>
)); else if(null!=yigin(dgr<0>
)) list4.add(yigin(dgr<0>
)); else if(null!=simge_cetveli(dgr<0>
)) { if(dgr<2>
.endsWith("H")) dgr<2>
=Integer.toHexString(Integer.parseInt(((dgr<2>
).substring(0,(dgr<2>
.length()-1))), 16)); if(dgr<2>
.length()>4) dgr<2>
=dgr<2>
.substring(dgr<2>
.length()-4); else { int f=dgr<2>
.length(); for (int i = 0; i <=(3-f); i++) {dgr<2>
=("0"+dgr<2>
);} } list4.add(dgr<2>
); } else if(null!=simge_cetveli_etiket(dgr<0>
)) { if(null!=hafiza_adresleyen(dgr<1>
)) {if(null!=simge_cetveli(dgr<2>
)) list4.add(Integer.toHexString(((Integer.parseInt((hafiza_adresleyen(dgr<1>
)),16))+(Integer.parseInt((simge_cetveli(dgr<2>
)),16))))); else list4.add(Integer.toHexString(((Integer.parseInt((hafiza_adresleyen(dgr<1>
)),16))+(Integer.parseInt((simge_cetveli_etiket(dgr<2>
)),16))))); } else if(null!=hafiza_adreslemeyen(dgr<1>
)) list4.add(hafiza_adreslemeyen(dgr<1>
)); else if(null!=yigin(dgr<1>
)) list4.add(yigin(dgr<1>
)); else if(null!=simge_cetveli(dgr<1>
)) { if(dgr<3>
.endsWith("H")) dgr<3>
=Integer.toHexString(Integer.parseInt(((dgr<3>
).substring(0,(dgr<3>
.length()-1))), 16)); if(dgr<3>
.length()>4) dgr<3>
=dgr<3>
.substring(dgr<3>
.length()-4); else{ int f=dgr<3>
.length(); for (int i = 0; i <=(3-f); i++) {dgr<3>
=("0"+dgr<3>
);} } list4.add(dgr<3>
);
}
}
d=++d;
}
}
}
int a=0;
String b;
private void equ_yakala(String equ)
{if (equ.trim().length() != 0){ if(equ.indexOf("ORG")!=-1) { b =(equ.substring(equ.lastIndexOf("ORG")+4)); a = Integer.parseInt(b, 16); a=a-1; } String[] dgr= equ.split(" |:"); if(((equ.indexOf("equ"))!=-1)) { list2.add(dgr<0>
); list5.add(Integer.toHexString(a)); simge_cetveli(dgr<0>
,(Integer.toHexString(a))); } if(((equ.indexOf(":"))!=-1)) { list2.add(dgr<0>
); list5.add(Integer.toHexString(a)); simge_cetveli_etiket(dgr<0>
,(Integer.toHexString(a)));
}
a=++a;
}
}
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)
{
list1.clear();
list2.clear();
list3.clear();
list4.clear();
list5.clear();
simge.clear();
etiket.clear();
try
{
String path = jTextField1.getText();
FileReader file = new FileReader(path);
BufferedReader reader = new BufferedReader(file);
String satir;
while(!(satir = reader.readLine()).equals("STOP"))
{
equ_yakala(satir);
list1.add(satir);
}
list1.add("STOP");
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "hata : Bitiş komutu eksik!!!");
}
}
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)
{
list4.clear();
list3.clear();
try
{
String path = jTextField1.getText();
FileReader file = new FileReader(path);
BufferedReader reader = new BufferedReader(file);
String satir;
while(!(satir = reader.readLine()).equals("STOP"))
{
cozumle(satir);
}
}
catch(Exception ex)
{
JOptionPane.showMessageDialog(null, "hata : " + ex);
}
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt)
{
list1.clear();
list2.clear();
list3.clear();
list4.clear();
list5.clear();
simge.clear();
etiket.clear();
}
private String hafiza_adresleyen(String kmt)
{
String k = null;
HashMap komut = new HashMap();
komut.put("AND", new String("0000"));
komut.put("ADD", new String("1000"));
komut.put("LDA", new String("2000"));
komut.put("STA", new String("3000"));
komut.put("BUN", new String("4000"));
komut.put("BSA", new String("5000"));
komut.put("ISZ", new String("6000"));
Set set = komut.entrySet();
Iterator i = set.iterator();
while(i.hasNext())
{Map.Entry me = (Map.Entry)i.next();
if( (me.getKey()).equals(kmt))
k=(String) me.getValue();
}
return k;
}
private String hafiza_adreslemeyen(String kmt)
{ String k = null;
HashMap komut1 = new HashMap();
komut1.put("SPA", new String("7400"));
komut1.put("SNA", new String("7200"));
komut1.put("SZA", new String("7100"));
komut1.put("SZE", new String("7080"));
komut1.put("CLA", new String("7040"));
komut1.put("CLE", new String("7020"));
komut1.put("CMA", new String("7010"));
komut1.put("CME", new String("7008"));
komut1.put("INC", new String("7004"));
komut1.put("CIR", new String("7002"));
komut1.put("CIL", new String("7001"));
Set set = komut1.entrySet();
Iterator i = set.iterator();
while(i.hasNext())
{Map.Entry me = (Map.Entry)i.next();
if( (me.getKey()).equals(kmt))
k=(String) me.getValue();
}
return k;
}
private String yigin(String kmt)
{ String k=null;
HashMap komut2= new HashMap();
komut2.put("SPS", new String("7840"));
komut2.put("SPI", new String("7820"));
komut2.put("PUSH", new String("7810"));
komut2.put("POP", new String("7808"));
komut2.put("SPM", new String("7804"));
komut2.put("ISP", new String("7802"));
komut2.put("RET", new String("7801"));
Set set = komut2.entrySet();
Iterator i = set.iterator();
while(i.hasNext())
{Map.Entry me = (Map.Entry)i.next();
if( (me.getKey()).equals(kmt))
k=(String) me.getValue();
}
return k;
}
HashMap simge = new HashMap();
private void simge_cetveli(String smg,String dgr)
{
simge.put(smg, new String (dgr));
}
private String simge_cetveli(String smg)
{ String k=null;
Set set = simge.entrySet();
Iterator i = set.iterator();
while(i.hasNext())
{Map.Entry me = (Map.Entry)i.next();
if( (me.getKey()).equals(smg))
{k=(String)me.getValue();
}
}
return k;
}
HashMap etiket = new HashMap();
private void simge_cetveli_etiket(String smg,String dgr)
{
etiket.put(smg, new String (dgr));
}
private String simge_cetveli_etiket(String smg)
{ String k=null;
Set set = etiket.entrySet();
Iterator i = set.iterator();
while(i.hasNext())
{Map.Entry me = (Map.Entry)i.next();
if( (me.getKey()).equals(smg))
{k=(String)me.getValue();
}
}
return k;
}
}
}
}
Not ; Bu uygulama; Suleyman Demirel Universitesi – Bilgisayar Muhendisligi Bilgisayar Mimarisi dersi icin tarafimizdan yazilmis ve de gelistirilmis bir uygulamadir…
Yorumlar