package prekladac; import derivacnistrom.*; import java.io.BufferedReader; import java.io.FileReader; import java.io.PrintWriter; /** * Implementace vlastního překladače */ public class Compiler { public Compiler(String zdroj, String cil) throws Exception { //tento konstruktor nejdříve spustí lexikální, syntaktický analizátor a nakonec provede překlad do jasminu //Lexikální analýza Lexer l=new Lexer(new FileReader(zdroj+".bas")); //Syntaktická analýza - Parser načítá pomocí Lexeru postupně jednotlivá slova vstupu a tvoří z nich rovnou strom při kontrole syntaxe //Sémantická analýza probíhá souběžne se syntaktickou Parser p=new Parser(l); DerivacniStrom ds=p.vytvorDerivacniStrom(); //Výpis derivačního stromu - jen pro účely ladění //System.out.println("\nVypis derivačního stromu:\n-------------------------"); //System.out.println(ds); //překlad PrintWriter pw=null; try { //vytvoříme pomocnou třídu //PomocnaPriPrekladu ppp=new PomocnaPriPrekladu(cil,true,true);//pomocná třída - návěští, hloubka zásobníku, zapisování kodu PomocnaPriPrekladu ppp=new PomocnaPriPrekladu(cil,true,true); //tu předáme metodě derivačního stromu ds.generate(ppp); //uzavřeme vygenerovaný soubor ppp.ukoncitVytvareni(); }catch(Exception exx){throw new Exception("Chyba při vytváření souboru s výstupním kódem");} //a nyní máme konečně hotovo /* //pro účely ladění: vypíšeme vytvořený soubor do konzole FileReader fr=new FileReader(cil+".j"); BufferedReader br=new BufferedReader(fr); String s=":"; while(s!=null) { s=br.readLine(); if(s!=null)System.out.println(s); } // */ } }