Implementation of Macroprocessors Using Java

Only available on StudyMode
  • Topic: Parameter, C, Subroutine
  • Pages : 17 (2164 words )
  • Download(s) : 573
  • Published : May 10, 2008
Open Document
Text Preview
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; ilinija=(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!"); return vr;}

public static String seciliniju(String ulaz){
String izlaz=""; int i;
for (i=0; ulaz.charAt(i)==' '; i++);
while (i
tracking img