Implementation of Macroprocessors Using Java
Essay by review • February 19, 2011 • Research Paper • 1,213 Words (5 Pages) • 1,356 Views
SISTEMSKO PROGRAMIRANJE
Sadrzaj:
1. Opis problema
2. Opis resenja i uputstvo za pokretanje
3. Listing programa
4. Karakteristicni ulazi i dobijeni izlazi
1. OPIS PROBLEMA
Implementira se makroprocesor sa ugnezdavanjem makropoziva, po sledecem algoritmu:
d := false (* definition mode switch *)
e := 0 (* expansion-level counter *)
read line from input
while line != empty do
if d then (* in definition mode *)
case opcode of
prototype: prepare formal parameter list
'MCEND': d:=false
other: replace i-th formal parameter by ’#i’
write line to new macro definition
else (* in copy mode or expansion mode *)
case opcode of
prototype:
macro name: e:=e+1
prepare actual parameter list
push actual parameter list on actual parameter stack
'MCDEFN' : d:=true
allocate new macro definition
'MCEND': pop actual parameter list (level e) from actual parameter stack
e:= e-1
other: write line to output
if (e>0) (* in expansion mode *)
read line from old macro definition named in current macro call
replace ’#i’ by actual parameter list(i) from actual parameter stack
else read line from input
Na steku stvarnih parametara je potrebno cuvati i povratnu liniju odakle treba nastaviti citanje ulaza po zavrsetku ekspanzije ugnezdenog poziva (nije precizirano u algoritmu).
2. OPIS RESENJA I UPUTSTVO ZA POKRETANJE
Opis Resenja
Implementacija je radjena u Javi.
Od nestandardnih struktura podataka koriscena je struktura Element, koja predstavlja element na steku stvarnih parametara, broj linije odakle treba nastaviti citanje po zavrsetku ekspanzije ugnezdenog poziva.
Obradjene greske u ulazu:
• MCEND bez MCDEFN
• MCDEFN bez MCEND
• Ulaz ne pocinje sa MCDEFN
• Na mestu prototipa je rezervisana rec
• Makro nije definisan
• Neusaglasen broj parametara u pozivu i definiciji makroa
Po nailasku na gresku , informacija o njoj se ispisuje , i program se prekida!
Napomena: Postoji spisak instrukcija koje se prihvataju. On se nalazi u okviru funkcije jeRezervisanaRec. Ako ulazni fajl sadrzi neku instrukciju koja se ne nalazi u datom spisku smatra se da dati makro nije definisan.
Uputstvo za pokretanje
Duplim klikom na PrimerSaPredavanja.bat , pokrece se glavni program za tekstualni ulaz iz primera sa predavanja (Ulaz.txt).
Program se moze pokrenuti i iz komandne linije naredbom oblika:
java Main BiloKojiUlaz.txt
3. LISTING PROGRAMA
import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
public static String ulaz;
public static String readLine(int brLinije) {
String line="";
try {
BufferedReader fajl = new BufferedReader(new FileReader(ulaz));
for (int i=1; i<brLinije; i++)
fajl.readLine();
line=fajl.readLine();}
catch(java.io.FileNotFoundException izuzetak) {}
catch(java.io.IOException izuzetak) {}
return line;}
public static boolean jePrototip(String[] s1,String s2){
int p=0;
boolean b=false;// s2 nije u s1
while(s1[p]!=null)
{if (s1[p++].equals(s2)) b=true;}
return b;}
public static int pronadji(Vector v,String opcode) {
String [] reci;
String linija;
int vr=-1;
for(int i=0;i<v.size();i++){
linija=(String)v.get(i);
reci=linija.split(" ");
if( reci[0].equals(opcode)) {vr=i+1; break;} }
if(vr==-1) System.out.println("neuspesna pretraga po TMDu!");
...
...