AMADEUS html plain
This sketchy text is generated by AMADEUS
UUE LISAMISEL MUUTA KOLMES KOHAS (vt "LISADA")
import java.awt.*;
import java.awt.event.*;
class BaseLanguage
abstract class BaseLanguage
ülemklass teistele baaskeeltele,
mis peaksid realiseerima Sketchify, Reduce jms.
LIIDES
//boolean sketchify(SketchyText skt0, SketchyText skt1,AmFrame fr);
//boolean textualize(SketchyText skt0, SketchyText skt1,AmFrame fr);
//boolean normalize(SketchyText skt0, SketchyText skt1,AmFrame fr);
//boolean parse(SketchyText skt0, SketchyText skt1, AmFrame fr);
//void reduce(Sketch s);
//void prepareTex(Sketch s);
ainult veateade:
public boolean sketchify(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
Sketch s = BaseLanguage.veateade("Sketchifier not implemented!");
s on nüüd skeem veateatega
skt1 <== s:
skt1.main.insert(s.branch(0), 0);
lisada uus haru
skt1.main.removeMember(1);
eemaldada vana (tühi) haru
skt1.main.baseLanguage =
BaseLanguage.newBaseLanguage(BaseLanguage.NONE);
<======true
public boolean textualize(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
Sketch s = BaseLanguage.veateade("Textualizer not implemented!");
s on nüüd skeem veateatega
skt1 <== s:
skt1.main.insert(s.branch(0), 0);
lisada uus haru
skt1.main.removeMember(1);
eemaldada vana (tühi) haru
skt1.main.baseLanguage =
BaseLanguage.newBaseLanguage(BaseLanguage.NONE);
<======true
public boolean normalize(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
Sketch s = BaseLanguage.veateade("Normalizer not implemented!");
s on nüüd skeem veateatega
skt1 <== s:
skt1.main.insert(s.branch(0), 0);
lisada uus haru
skt1.main.removeMember(1);
eemaldada vana (tühi) haru
skt1.main.baseLanguage =
BaseLanguage.newBaseLanguage(BaseLanguage.NONE);
<======true
public boolean parse(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
Sketch s = BaseLanguage.veateade("Parser not implemented!");
Antud: 1) skeemtekst skt0
taval. jooksvas aknas, EKFG grammatikas kribu-krabu
2) skeemtekst skt1, selle juurskeem (skt1.main) on
tühi üheharuline lihtskeem - tulemuse "juur",
vastab mitteterminalile "tekst"
Tulemus: analüüsitud lausetest saadud moodulskeemid
lisatud skeemi skt1.main sisse (haru liikmeteks)
skt0 viia välja liht-tekstifailina (skt0 ==> fnimi0)
String fnimi0 = Default.tempSketchifyXmlSource;
las olla see
skt0.file = new AmFile(skt0);
skt0.file.name = fnimi0;
skt0.file.writeTextFile(fnimi0);
s on nüüd mudelile vastav, teksti kujutav lihtskeem (või veateade)
skt1 <== s
s ainuke haru panna skt1.main haruks
skt1.main.insert(s.branch(0), 0);
lisada uus haru
skt1.main.removeMember(1);
eemaldada vana (tühi) haru
skt1.main.baseLanguage =
BaseLanguage.newBaseLanguage(BaseLanguage.PARSETREE);
<======true
void reduce(Sketch s)
System.out.println("Reducer not implemented");
void prepareTex(Sketch s)
System.out.println("PrepareTex not implemented");
valmis, võib üledefineerida:
byte nextPrimitiveMemberType(byte prev)
vajadusel alamklassis yledefineerida!
??prev
? Primitive.SIMPLE:
<==========Primitive.CONDITION
<==========Primitive.STRONG_ARROW
ARROW
? Primitive.STRONG_ARROW:
? Primitive.WEAK_ARROW:
<==========Primitive.SIMPLE
<======0
byte nextSchemeType(Scheme s)
vajadusel alamklassis yledefineerida!
??s.type
? Scheme.SIMPLE:
<==========Scheme.LOOP
<==========Scheme.MODULE
? Scheme.MODULE:
? (s.comment.elements.size() > 1)
<==========Scheme.SIMPLE
ei saa avada
? (s.parent == null)
<==========Scheme.SIMPLE
<==========Scheme.SIMPLE
? (((Sketch)s).isMono() && s.isHeadless())
<==========-1
<==========Scheme.SIMPLE
<======-1
byte typeForBranchHead(Sketch s)
vajadusel alamklassis yledefineerida!
<======PrimitiveHead.SIMPLE
??s.primitiveHead(0).type
? PrimitiveHead.SIMPLE:
<==========PrimitiveHead.SIMPLE
<==========PrimitiveHead.CASE
<==========PrimitiveHead.CATCH
<======PrimitiveHead.SIMPLE
byte nextPrimitiveHeadType(Scheme s, byte prev)
vajadusel alamklassis yledefineerida!
s - skeem, mille pa"is, prev - pa"ise tyyp
? (s instanceof Sketch)
??prev
? PrimitiveHead.SIMPLE:
<==============PrimitiveHead.LOOP
<==============PrimitiveHead.SWITCH
<==============PrimitiveHead.TRY
<==============PrimitiveHead.SIMPLE
<======
Branch
byte parentHeadType;
? (s.parent.head.size() == 0)
parentHeadType = -1;
<======
parentHeadType = s.parent.primitiveHead(0).type;
? (parentHeadType < 0)
??prev
? PrimitiveHead.SIMPLE:
<==============PrimitiveHead.LOOP
<==============PrimitiveHead.CASE
<==============PrimitiveHead.DEFAULT
<==============PrimitiveHead.CATCH
<==============PrimitiveHead.FINALLY
<==============PrimitiveHead.SIMPLE
<======
??parentHeadType
SIMPLE/LOOP
? PrimitiveHead.SIMPLE:
? PrimitiveHead.LOOP:
??prev
? PrimitiveHead.SIMPLE:
<==================PrimitiveHead.LOOP
..case
? PrimitiveHead.LOOP:
<==================PrimitiveHead.CASE
<==================PrimitiveHead.DEFAULT
<==================PrimitiveHead.CATCH
<==================PrimitiveHead.SIMPLE
? PrimitiveHead.SWITCH:
??prev
? PrimitiveHead.CASE:
<==================PrimitiveHead.DEFAULT
<==================PrimitiveHead.CASE
<==================PrimitiveHead.CASE
? PrimitiveHead.TRY:
??prev
? PrimitiveHead.CATCH:
<==================PrimitiveHead.FINALLY
<==================PrimitiveHead.CATCH
<==================PrimitiveHead.CATCH
<======prev
MUUDETAVAD UUE BAASKEELE LISAMISEL
* static final byte
LISADA
JAVA = 0;
LATEX = 1;
HTML = 2;
NONE = 3;
XML = 4;
MATLAB = 5;
EKFG = 6;
PARSETREE = 7;
FAMILY=8;
JAVACC=9;
LISADA KEEL = n;
static String[] items =kasutatavate keelte loetelu (samas jrk.)
static String[] items =
LISADA
"Java", "LaTex", "HTML",
AmLocale.None(), "XML", "Matlab", "EKFG",
AmLocale.Parse_tree(), AmLocale.Family(),
"JavaCC"
LISADA , "Keel"
;
static BaseLanguage newBaseLanguage(byte type)
LISADA
<==========new BaseLanguageJava()
<==========new BaseLanguageJavaCC()
<==========new BaseLanguageLaTex()
<==========new BaseLanguageHtml()
<==========new BaseLanguageXML()
<==========new BaseLanguageMatlab()
<==========new BaseLanguageEKFG()
<==========new BaseLanguageParseTree()
<==========new BaseLanguageFamily()
<==========new BaseLanguage0()
// LISADA
? KEEL:
<======new BaseLanguageKeel()
<======new BaseLanguage0()
static AmList list;
byte type;
static boolean userSetAll(Scheme s, AmFrame frame)
kysib baaskeele kasutajalt
paneb baaskeele skeemile s ja ko~igile alamskeemidele
list = new AmList(items);
AmDialog d = new AmDialog
(frame, AmLocale.Base_language(),AmDialog.B_SELECT_CANCEL,
AmLocale.Select_base_language()+".",
(AmList)list);
int bli = -999;
kompilaatorile
??d.getTulemus()
? AmDialog.CANCEL:
<==========false
? AmDialog.SELECT:
bli = list.getSelectedIndex();
<======
setAll(s, (byte)bli);
<======true
static void setAll(Scheme s, byte type)
s.baseLanguage = newBaseLanguage(type);
* int i = 0; i < s.body.size(); i++
Object o = s.member(i);
? (o instanceof Scheme)
setAll((Scheme)o, type);
klassimeetodid
skeemistamine mudeli järgi
public static void sketchifyParseTree(Sketch s, Sketch mudel)
Antud: s - skeemkujul parsipuu
Tulemus: s teisendatud vastavalt mudelile
s.baseLanguage.reduce(s);
sketch2sketch(s, mudel);
sketch2branch(s, mudel);
puhastada(s);
private static void sketch2sketch(Sketch s, Sketch mudel)
skeemidele omistatakse atribuudid mudelist:
liik, baaskeel, vaade ja ikon-tunnus
ja skeemidele omistatakse lüngad (komm, päis) mudelist:
Eeldus: igal skeemil (s) on parajasti üks haru
mudelis võib mitteterminali lõpus olla veel *
String smt = mitteterminal(s.comment, true);
skeemi s atribuudid
<======
ei ole muudetav skeem
res = null;
findScheme(mudel, smt);
Scheme mudelsk = res;
? mudelsk == null
<======
VIGA: mitteterminal smt puudub mudelis
atribuutide omistamine:
s.type = mudelsk.type;
tüüp
s.baseLanguage = newBaseLanguage(
mudelsk.baseLanguage.type);
baaskeel
View.set(s, mudelsk.view.type);
vaade
s.icon = mudelsk.icon;
ikon
pannaLüngad(s, mudelsk);
täitaLüngadPäises(s);
//täitaLüngadPrimitiivLiikmetes(s);
TODO
Branch br = s.branch(0);
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof Sketch
sketch2sketch((Sketch)o, mudel);
private static void pannaLüngad(Sketch s, Scheme mudelsk)
s.comment = lisaLüngad(mudelsk.comment);
viimane mitteterminal kuulub skeemi juurde,
sellest > maha:
String komm = s.comment.toString().trim();
int k = komm.lastIndexOf(">");
? k != -1
komm =
komm.substring(0, k) + komm.substring(k+1);
? komm.endsWith("*")
komm = komm.substring(0, komm.length() - 1);
s.comment = new Row(komm, Default.commentColor);
* int i = 0; i < mudelsk.head.size(); i++
PrimitiveHead h = mudelsk.primitiveHead(i).makeCopy();
h.text = lisaLüngad(h.text);
s.add(h);
private static Row lisaLüngad(Row rida)
Row r = new Row(Default.foregroundColor);
* int i = 0, j = 1; i < rida.elements.size(); i++
rida.getElement(i);
Symbol sy = rida.sy;
r.insert(new Symbol(sy.c, sy.font, sy.color), j++);
? sy.c == Default.parseSpecial
r.insert(new Symbol('>', sy.font, sy.color), j++);
r.remove(0);
r.planSize();
<======r
private static Text lisaLüngad(Text tekst)
Text t = new Text();
* int i = 0; i < tekst.rows.size(); i++
t.insert(lisaLüngad(tekst.row(i)), i+1);
t.remove(0);
t.comment = lisaLüngad(tekst.comment);
t.plan(0, 0);
planeerida suurus
<======t
private static String mitteterminal(Row r, boolean skeem)
String rida = r.toString().trim();
int nll = -1;
? skeem
nll = rida.lastIndexOf(Default.parseSpecial);
<==============""
rida = rida.substring(nll);
int k = rida.indexOf(Default.parseSpecial);
? k == -1
<======""
<======rida.substring(k)
private static void sketch2branch(Sketch s, Sketch mudel)
skeemi s (ja iga tema alamskeemi) korral, mis mudelis on Skecth
ainukese haru kõik liikmed (mis peavad mudelis olema Branch)
lähevad skeemi s harudeks
Eeldus: igal skeemil (s) on parajasti üks haru
mudelis võib mitteterminali lõpus olla veel *
String smt = mitteterminal(s.comment, true);
<======
ei ole muudetav skeem
res = null;
findScheme(mudel, smt);
Scheme mudelsk = res;
? mudelsk == null
<======
VIGA: mitteterminal smt puudub mudelis
atribuutide omistamine:
? mudelsk instanceof Sketch
tehaHarud(s);
s-l on juba uued harud
* int i = 0; i < s.body.size(); i++
Branch br = s.branch(i);
* int j = 0; j < br.body.size(); j++
Object o = br.member(j);
? o instanceof Sketch
sketch2branch((Sketch)o, mudel);
private static void tehaHarud(Sketch s)
//kontroll(s);
TODO
Branch br0 = s.branch(0);
fiktiivne haru,; jääb, kui uut ei tule
s.insert(new Branch(Scheme.SIMPLE,
newBaseLanguage(s.baseLanguage.type)), 0);
s.removeMember(1);
selle asemele tulevad harud alamskeemidest
* int j = 0; j < br0.body.size(); j++
Object o = br0.member(j);
? o instanceof Sketch
Branch br = haruks((Sketch)o);
s.add(br);
<------
VIGA: skeemis s on liige, mis pole Sketch
? s.body.size() > 1
s.removeMember(0);
private static Branch haruks(Sketch s)
Branch res =
new Branch(Scheme.SIMPLE, new BaseLanguage0());
res.removeMember(0);
res.baseLanguage = s.baseLanguage;
res.type = s.type;
View.set(res, s.view.type);
res.icon = s.icon;
res.comment = s.comment;
* int i = 0; i < s.head.size(); i++
res.add(s.primitiveHead(i));
* int i = 0; i < s.body.size(); i++
Branch br = s.branch(i);
* int j = 0; j < br.body.size(); j++
Object o = br.member(j);
? o instanceof Sketch
res.add((Sketch)o);
<------
res.add((PrimitiveMember)o);
<======res
static Scheme res = null;
private static void findScheme(Scheme smu, String smt)
String smuMitteterm = mitteterminal(smu.comment, true);
? smuMitteterm.endsWith("*")
smuMitteterm =
smuMitteterm.substring(0, smuMitteterm.length()-1);
? smuMitteterm.equals(smt)
res = smu;
<======
* int i = 0; i < smu.body.size(); i++
Object o = smu.member(i);
? o instanceof Primitive
<------
Scheme liige = (Scheme)o;
smuMitteterm = mitteterminal(liige.comment, false);
? smuMitteterm.endsWith("*")
smuMitteterm =
smuMitteterm.substring(0, smuMitteterm.length()-1);
? smuMitteterm.equals(smt)
res = liige;
<==============
* int j = 0; j < liige.body.size(); j++
o = liige.member(j);
? o instanceof Scheme
findScheme((Scheme)o, smt);
<==================
private static void täitaLüngadPäises(Sketch s)
LIHTSUSTATUD. Lünk on eraldi element kujul
?>mitteterminal (lõpus * kuulub kogu primitiivi juurde)
Object o = s.member(0);
Branch br = (Branch)o;
täita lüngad skeemikommentaaris
TODO
täita lüngad päises:
* int i = 0; i < s.head.size(); i++
PrimitiveHead h = s.primitiveHead(i);
Text t = h.text;
String komm = t.comment.toString().trim();
? komm.endsWith("*")
igaks juhuks dubleerida see elementaarpäis:
s.insert(h.makeCopy(), i+1);
kommentaaris
String asendatav = "";
? komm.startsWith("?>")
asendatav = "?" + komm.substring(2);
? komm.endsWith("*")
asendatav =
asendatav.substring(0, asendatav.length() - 1);
? asendatav.length() == 0
<==========
Row asendaja = võttaAsendusrida(br, asendatav);
? asendaja != null
t.comment = asendaja;
t.comment.setColor(Default.commentColor);
tekstis
Row r0 = t.row(0);
String rida0 = r0.toString().trim();
asendatav = "";
? rida0.startsWith("?>")
asendatav = "?" + rida0.substring(2);
? rida0.endsWith("*")
asendatav =
asendatav.substring(0, asendatav.length() - 1);
? asendatav.length() == 0
<==========
asendaja = võttaAsendusrida(br, asendatav);
? asendaja != null
t.insert(asendaja, 0);
panna värv:
r0.getElement(0);
t.setColor(r0.sy.color);
t.remove(1);
komm = t.comment.toString().trim();
? komm.endsWith("*")
i-ndat päist ei asendatud, eemaldada
igaks juhuks dubleeritud elementaarpäis:
s.removePrimitiveHead(i+1);
private static Row võttaAsendusrida(Branch br, String asendatav)
Row res = null;
* int j = 0; j < br.body.size(); j++
Object o = br.member(j);
? o instanceof Sketch
<------
PrimitiveMember p = (PrimitiveMember)o;
String pkomm = p.text.comment.toString().trim();
? pkomm.equals(asendatav)
res = p.text.row(0);
br.removeMember(j); j--;
<==============res
<======res
private static void puhastada(Scheme s)
praegu PUUDULIK
koristada sisse jäänud mudelitekstid
skeemikommentaar:
String komm = s.comment.toString();
int k = komm.lastIndexOf(Default.parseSpecial);
? k != -1
komm = komm.substring(0, k);
s.comment = new Row(komm, Default.commentColor);
päised:
* int i = 0; i < s.head.size(); i++
kommentaarid:
komm = s.primitiveHead(i).text.comment.toString();
? komm.endsWith("*")
s.removePrimitiveHead(i); i--;
<======
k = komm.lastIndexOf(Default.parseSpecial + ">");
? k != -1
komm = komm.substring(0, k);
asendada eraldajad:
StringBuffer bkomm = new StringBuffer(komm);
k = bkomm.toString().indexOf(Default.parseSeparator);
? k == -1
<======
komm = bkomm.toString();
s.primitiveHead(i).text.comment = new Row(komm, Default.commentColor);
päisetekstid:
Row r0 = s.primitiveHead(i).text.row(0);
komm = r0.toString();
k = komm.lastIndexOf(Default.parseSpecial + ">");
? k != -1
komm = komm.substring(0, k);
asendada eraldajad:
StringBuffer bkomm = new StringBuffer(komm);
k = bkomm.toString().indexOf(Default.parseSeparator);
? k == -1
<======
komm = bkomm.toString();
r0.getElement(0);
Color värv = r0.sy.color;
s.primitiveHead(i).text.insert( new Row(komm, värv), 0);
s.primitiveHead(i).text.remove(1);
* int i = 0; i < s.body.size(); i++
Object o = s.member(i);
? o instanceof Scheme
puhastada((Scheme)o);
public static void Teade_teostamata(AmFrame frame)
AmDialog d = new AmDialog(frame, "!",
AmDialog.B_OK, AmLocale.Not_implemented() +"!");
static Sketch veateade(String veateade)
tagastatakse veateate moodulskeemi sisaldav tulemus-skeem
Branch b = new Branch(Scheme.SIMPLE,
new BaseLanguage0());
Sketch tulem = new Sketch(Scheme.SIMPLE, b,
new BaseLanguage0());
teen vea moodulskeemi (üks haru)
Branch haru = new Branch(Scheme.SIMPLE,
new BaseLanguage0());
Sketch lause = new Sketch(Scheme.MODULE, haru,
new BaseLanguage0());
lause.comment = new Row(AmLocale.Error(), Default.conditionColor);
veateade moodulskeemi sisse
Text veaTekst = new Text();
veaTekst.insert(new Row(veateade, Default.conditionColor), 1);
veaTekst.remove(0);
PrimitiveMember pm =
new PrimitiveMember(Primitive.SIMPLE, veaTekst);
haru.insert(pm, 0);
haru.removeMember(haru.body.size() - 1);
panen selle skeemi tulemuse harusse (b)
b.insert(lause, 0);
esikohale
eemaldan esialgse tühja primitiivliikme
b.removeMember(b.body.size() - 1);
<======tulem