AMADEUS html plain
import java.util.*;
import java.awt.*;
import java.io.*;
class BaseLanguageFamily extends BaseLanguage
static AmFrame frame;
raam, millele dialoogiaken
static AmCanvas c;
BaseLanguageFamily()
PARSE
public boolean parse(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
Antud: 1) skeemtekst skt0 - lihttekst keeles KEEL
taval. jooksvas aknas
2) skeemtekst skt1, selle juurskeem (skt1.main) on
tühi üheharuline lihtskeem - tulemuse "juur",
vastab taval. mitteterminalile "Start( )"
Tulemus: analüüsipuu
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);
parsida fnimi0
Sketch s = parse(fnimi0, skt0);
s on nüüd mudelile vastav, analüüsipuu 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
public Sketch parse(String fnimi0, SketchyText skt0)
failist fnimi0, kus on väljaviidud skt0 (viimane: veateate jaoks)
Sketch s = null;
parser: fnimi0 ==> Sketch s
!!
s = FamilyParser.parse(fnimi0);
ASENDUS:FamilyParser <== parseri nimi
! (FileNotFoundException e)
System.out.println(e.getMessage());
System.exit(0);
! (ParseException e)
String viga = e.getMessage();
System.out.println(viga);
s = BaseLanguage.veateade(viga);
veateatega moodulskeemi sisaldav
lisada veel vigane rida skeemi s algusesse
rea number
int i = viga.indexOf(" line ");
? i == -1
<==========
String reaNr = viga.substring(i+6);
StringTokenizer st = new StringTokenizer(reaNr, ", ");
reaNr = st.nextToken();
int reanr = new Integer(reaNr).intValue();
veeru number
i = viga.indexOf(" column ");
? i == -1
<==========
String veeruNr = viga.substring(i+8);
st = new StringTokenizer(veeruNr, "., ");
veeruNr = st.nextToken();
int veerunr = new Integer(veeruNr).intValue();
PrimitiveMember pm =
(PrimitiveMember)(skt0.main.branch(0).member(reanr-1));
String ps = pm.text.toString();
ps on vigase rea tekst
Text t = new Text();
String eel = " ";
eel: eeltühikud reanumbrile
? reanr > 999
eel = "";
neljakohaline
<======
? reanr > 99
eel = " ";
kolmekohaline
<======
? reanr > 9
eel = " ";
kahekohaline
Row r = new Row(eel+reaNr+": "+ps, Default.foregroundColor);
r on vigane rida koos reanumbriga
reanumber halliks
* int k = 1; k < 6; k++
r.getElement(k);
r.sy.color = Default.selectionColor;
vigase osa algussümbol punaseks
r.getElement(veerunr + 6);
r.sy.color = Default.conditionColor;
lisada rida teksti
t.insert(r, 0);
t.remove(1);
lisada tekst skeemi s
s.branch(0).insert(
new PrimitiveMember(Primitive.SIMPLE, t),0);
s on nüüd mudelile vastav, analüüsipuu lihtskeem (või veateade)
<======s
SKETCHIFY
public boolean sketchify(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
Antud: 1) skeemtekst skt0 - lihttekst keeles KEEL
taval. jooksvas aknas
2) skeemtekst skt1, selle juurskeem (skt1.main) on
tühi üheharuline lihtskeem - tulemuse "juur",
vastab taval. mitteterminalile "Start( )"
Tulemus: analüüsipuu
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);
parsida fnimi0
Sketch s = parse(fnimi0, skt0);
s on nüüd mudelile vastav, analüüsipuu lihtskeem (või veateade)
TODO kas oli viga
Sketch mudel = null;
praegu
a la item0BListener (import macro)
//mudel failist dialoogis
Item0100Listener.importInto(dialogTargetFrame, null);
kui oli Cancel
? dialogTargetFrame.getTitle().indexOf("noname") > 0
<======
mudel = dialogTargetFrame.contents.main;
importida konkreetse nimega mudel (töökataloogist)
SketchyText skt = new SketchyText(null);
skt.file = new AmFile(skt);
skt.file.name = "familyModel.html";
konkreetne nimi
skt.frame = dialogTargetFrame;
skt.frame.contents = skt;
skt.file.importsFile();
mudel = skt.main;
? mudel != null
BaseLanguage.sketchifyParseTree(s, mudel);
s ==> s
arvestada küljendusinfo:
dollarTunnused(s);
keele Family spetsiifiline
skt1 <== s
s ainuke haru panna skt1.main haruks
s.branch(0).baseLanguage =
BaseLanguage.newBaseLanguage(BaseLanguage.FAMILY);
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.FAMILY);
<======true
private void dollarTunnused(Sketch s)
? !s.isHeadless()
igaks juhuks
Row r = s.primitiveHead(0).text.row(0);
? r.toString().startsWith("$")
s.type = Scheme.MODULE;
r.remove(0);
? r.toString().startsWith("$")
s.type = Scheme.LOOP;
r.remove(0);
* 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
tärnTunnused((Sketch)o);
NORMALIZE
normalize
public boolean normalize(SketchyText skt0,
main = source
SketchyText skt1,
main = new
AmFrame dialogTargetFrame)
frame = dialogTargetFrame;
skt1.main.insert(skt0.main.branch(0).makeCopy(),1);
skt1.main.removeMember(0);
skt1.main.baseLanguage = new BaseLanguageFamily();
Branch mainBr = null;
ainult üheharulisi skeemtekste
? skt1.main.body.size() == 1
mainBr = skt1.main.branch(0);
harutatakse ainukese harus esimene (ainuke) skeem
* int i = mainBr.body.size()-1; i >= 0 ; i--
int i = 0; i < mainBr.body.size(); i++
Object o = mainBr.member(i);
? o instanceof Sketch
Sketch sk = (Sketch)o;
harutada(sk, mainBr);
mainBr sisaldab nüüd harutatud skeemid
(viimaseks) on jäänud sk ise
sk.remove();
<======
<======true
private void harutada(Sketch s, Branch mainBr)
skeemi kommentaariks skeemitase arv tühikuid;
kasutab prepareTex
String taane = "";
int t = (s.level()-1)/2;
* int i = 0; i < t; i++
s.comment = new Row(taane, Default.commentColor);
? s.type != Scheme.LOOP
alamskeemid
..for
* int k = s.body.size()-1; k >= 0; k--
Branch br = s.branch(k);
..for
* int i = br.body.size()-1; i >=0 ; i--
Object o = br.member(i);
? o instanceof Sketch
harutada((Sketch)o, mainBr);
? s.type == Scheme.SIMPLE
s.icon = false;
<======
? s.type == Scheme.LOOP
s.icon = true;
<======
? s.type == Scheme.MODULE
s ise:
vanema nimi haru 1. kommnettriks
? s.parent != null
Sketch ss = (Sketch)((s.parent).parent);
? ss != null
? !ss.isHeadless()
String ülemaNimi = ss.primitiveHead(0).text.row(0).toString();
s.branch(0).comment = new Row(ülemaNimi, Default.commentColor);
Sketch sk =s.makeCopy();
sk.icon = false;
mainBr.insert(sk, 0);
s viimased harud ära:
* int k = 1; k < s.body.size(); k++
s esimene haru tühjaks:
Branch br = s.branch(0);
int n = br.body.size();
* int i = 0; i < n; i++
s esimese haru päis maha:
br.head.removeAllElements();
s esim. el-päise lõppu tärn:
? s.head.size() > 0
igaks juhuks
s.primitiveHead(0).text.row(0).append(
new Symbol('*', Default.sketchHeadColor));
s.icon = true;
TEXTUALIZE
* static
String taane;
String taandeSamm = " ";
Branch br1;
String clb;
public boolean textualize(SketchyText skt0, SketchyText skt1,
AmFrame dialogTargetFrame)
taane = "";
frame = dialogTargetFrame;
Sketch sNew = skt1.main;
Sketch s = skt0.main;
sNew.baseLanguage = new BaseLanguageFamily();
sNew.branch(0).baseLanguage = new BaseLanguageFamily();
Branch br = s.branch(0);
br1 = sNew.branch(0);
br1.body.removeElementAt(0);
* int i = 0; i < br.body.size(); i++
Object o = br.member(i);
? o instanceof PrimitiveMember
<------
haru lihtliige loetakse kommentaariks
<======true
private void textualize(Sketch sk)
String nimi = textualizeHead(sk);
int loeRidu = 0;
taane += taandeSamm;
* int i = 0; i < sk.body.size(); i++
Branch br = sk.branch(i);
int n = br.head.size();
? n == 0
päiseta haru loetakse kommentaariks
<======
selline on lapsel, kel pole abielu ega järglasi
textualizeHead(br);
taane += taandeSamm;
* int j = 0; j < br.body.size(); j++
Object o = br.member(j);
? o instanceof PrimitiveMember
<------
haru lihtliige loetakse kommentaariks
textualize((Sketch)o);
loeRidu++;
taane --
taane = taane.substring(
0, taane.length() - taandeSamm.length());
writeLine("]");
loeRidu++;
taane --
taane = taane.substring(
0, taane.length() - taandeSamm.length());
? loeRidu > 1
writeLine("}//"+ nimi);
<======
private String textualizeHead(Scheme s)
tagastab isiku nime
String nimi = "";
int n = s.head.size();
? n == 0
haru korral enne kontrollitud (n!=0)
<======nimi
päiseta skeem on välja kommenteeritud
String rida = "{ ";
? s instanceof Branch
rida = "[ ~ ";
arvestusega, et nimetekstiga reguleeritakse:
elukaaslane (partner): järgneb "/ nimi /" ja
teadmata partner: järgneb "/ /"
nimi = s.primitiveHead(0).text.toString().trim();
küljendusinfo tärnide abil
? s.type == Scheme.MODULE
rida += "$" + nimi;
<======
? s.type == Scheme.LOOP
rida += "$$" + nimi;
<======
* int k = 0; k < n; k++
kõigi el-päiste kommentaarid
String komm =
s.primitiveHead(k).text.comment.toString().trim();
? komm.length() > 0
rida += " ("+ komm + ")";
writeLine(rida);
rida = " ";
järgmiste kommentaaride ette
<======nimi
private void writeLine(String str)
Text newT = new Text();
newT.rows.removeElementAt(0);
newT.rows.addElement(
new Row(taane + str, Default.foregroundColor));
br1.body.addElement(
new PrimitiveMember(Primitive.SIMPLE, newT));
prepareTex
BaseLanguageJava eeskujul (MUUDETUD)
static final int PEATÜKI_TASE = 1;
void prepareTex(Sketch s)
private int prepareTexRek(Sketch s)
lisada vanema nimi skeemikommentaarile
? s.type == Scheme.MODULE
? s.branch(0).body.size() > 0
ei ole kõdunud
? !s.isHeadless()
String komm = s.branch(0).comment.toString();
? komm.trim().length() != 0
vanema nime pole
String kommS = s.comment.toString();
tühikud
s.comment = new Row(
kommS+ "{\\footnotesize " + "$\\succ$" + komm + "}",
Default.commentColor);
//
eeldab: harude baaskeel on FAMILY
prepareTex(s.comment);
pa"ised
* int j = 0; j < s.head.size(); j++
prepareTex(s.primitiveHead(j).text);
? j == 0
esimesele bf
Text t = s.primitiveHead(0).text;
String isik = t.row(0).toString().trim();
String isik1 = "{\\bf " + isik + "}" +
"\\index{" + isik + "}";
t.insert(new Row(isik1, Default.literalColor), 1);
t.remove(0);
t.row(0).planSize();
prepareTex(s.primitiveHead(j).text.comment);
* int i = 0; i < s.body.size(); i++
Branch br = s.branch(i);
// MUUDETUD
? br.baseLanguage.type != BaseLanguage.JAVA
<----------;
eeld: harudel pole kommentaare, esimesele pandi juba tex-rida
//MUUDETUD prepareTex(br.comment);
* int j = 0; j < br.head.size(); j++
prepareTex(br.primitiveHead(j).text);
prepareTex(br.primitiveHead(j).text.comment);
..for
* int j = 0; j < br.body.size(); j++
Object o = br.member(j);
? o instanceof Sketch
Sketch sk = (Sketch)o;
int kk = prepareTexRek(sk);
sk.baseLanguage.prepareTex(sk);
j += kk;
<------
primitiiv
Primitive p = (Primitive)o;
prepareTex(p.text);
prepareTex(p.text.comment);
primitiiv
panna abielumärk:
* int i = 0; i < s.body.size(); i++
Branch br = s.branch(i);
? br.head.size() == 0
<------
Text t = br.primitiveHead(0).text;
t.row(0).insert(new Symbol(' ', Default.literalColor) ,1);
t.row(0).insert(new Symbol('$', Default.literalColor) ,1);
t.row(0).insert(new Symbol('y', Default.literalColor) ,1);
t.row(0).insert(new Symbol('t', Default.literalColor) ,1);
t.row(0).insert(new Symbol('f', Default.literalColor) ,1);
t.row(0).insert(new Symbol('n', Default.literalColor) ,1);
t.row(0).insert(new Symbol('i', Default.literalColor) ,1);
t.row(0).insert(new Symbol('\\', Default.literalColor) ,1);
t.row(0).insert(new Symbol('$', Default.literalColor) ,1);
t.row(0).planSize();
? s.branch(0).body.size() == 0
? s.branch(0).isHeadless()
<======
on kõdunud
? !s.isHeadless()
String isikunimi =
s.primitiveHead(0).text.row(0).toString();
sisukorra rida:
String taane = "";
String komment = s.comment.toString();
int n = 0;
järjest. esitühikute arv
* n = 0; n < komment.length(); n++
? komment.charAt(n) != ' '
<======
//
* int i = 0; i < n; i++
String texSisukord;
? n <= PEATÜKI_TASE
texSisukord = "\\addcontentsline{toc}{chapter}{\\numberline{}" + taane + isikunimi + "}";
<======
texSisukord = "\\addcontentsline{toc}{section}{\\numberline{}" + taane + isikunimi + "}";
? s.type == Scheme.LOOP
skeem on lihtsalt kinni (ikoniseeritud)
s.primitiveHead(0).text.insert(new Row(isikunimi + texSisukord,
Default.commentColor), 0);
s.primitiveHead(0).text.remove(1);
<======
s.branch(0).comment = new Row(texSisukord,
Default.commentColor);
skeemi s ette veel, mida soovitakse:
esimesel tasemel, skeemide vahele
? s.type == Scheme.MODULE
Branch bb = (Branch)(s.parent);
int num = bb.body.indexOf(s);
<==========
String ss = "\\ ";
" \\newpage \\chapter*{\\ } \\vspace*{-4.5cm} ";
Row ri = new Row(ss, Default.literalColor);
Text te = new Text();
te.insert(ri, 1);
te.remove(0);
PrimitiveMember pm = new PrimitiveMember(Primitive.SIMPLE, te);
bb.insert(pm, num);
<==============1
lisati selle skeemi s ette üks primitiiv
<======0
private void prepareTex(Row r)
kommentaaris
int nOrig = r.elements.size();
_ -> \_
'>' ==> Rightarrow
..for
* int j = 1; j < r.elements.size(); j++
r.getElement(j);
? r.sy == null
<------
? r.sy.c == '_'
r.insert(new Symbol('\\', Default.literalColor), j);
j++;
<------
? r.sy.c == '>'
r.remove(j);
r.insert(new Symbol('$', Default.literalColor), j);
r.insert(new Symbol(' ', Default.literalColor), j);
r.insert(new Symbol('w', Default.literalColor), j);
r.insert(new Symbol('o', Default.literalColor), j);
r.insert(new Symbol('r', Default.literalColor), j);
r.insert(new Symbol('r', Default.literalColor), j);
r.insert(new Symbol('a', Default.literalColor), j);
r.insert(new Symbol('t', Default.literalColor), j);
r.insert(new Symbol('h', Default.literalColor), j);
r.insert(new Symbol('g', Default.literalColor), j);
r.insert(new Symbol('i', Default.literalColor), j);
r.insert(new Symbol('R', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j);
j += 11;
..if
? nOrig != r.elements.size()
r.planSize();
<======
private void prepareTex(Text t)
mittekommentaaris
..for
* int i = 0; i < t.rows.size(); i++
Row r = t.row(i);
int nOrig = r.elements.size();
..for
* int j = 1; j < r.elements.size(); j++
r.getElement(j);
? r.sy != null
..if
? (r.sy.c == '=') ||
(r.sy.c == '+') ||
//(r.sy.c == '-') || MUUDETUD
(r.sy.c == '*') ||
(r.sy.c == '/') ||
(r.sy.c == '<') ||
(r.sy.c == '>')
r.insert(new Symbol('$', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j+2);
j++;
<======
? (r.sy.c == '{') || (r.sy.c == '}')
r.insert(new Symbol('\\', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j+3);
j += 2;
<======
? r.sy.c == '|'
r.remove(j);
r.insert(new Symbol('$', Default.literalColor), j++);
r.insert(new Symbol('\\', Default.literalColor), j++);
r.insert(new Symbol('m', Default.literalColor), j++);
r.insert(new Symbol('i', Default.literalColor), j++);
r.insert(new Symbol('d', Default.literalColor), j++);
r.insert(new Symbol('$', Default.literalColor), j);
<======
? r.sy.c == '\\'
r.remove(j);
r.insert(new Symbol('$', Default.literalColor), j++);
r.insert(new Symbol('\\', Default.literalColor), j++);
r.insert(new Symbol('b', Default.literalColor), j++);
r.insert(new Symbol('a', Default.literalColor), j++);
r.insert(new Symbol('c', Default.literalColor), j++);
r.insert(new Symbol('k', Default.literalColor), j++);
r.insert(new Symbol('s', Default.literalColor), j++);
r.insert(new Symbol('l', Default.literalColor), j++);
r.insert(new Symbol('a', Default.literalColor), j++);
r.insert(new Symbol('s', Default.literalColor), j++);
r.insert(new Symbol('h', Default.literalColor), j++);
r.insert(new Symbol('$', Default.literalColor), j);
<======
? (r.sy.c == '&') ||
(r.sy.c == '%') ||
(r.sy.c == '&') ||
(r.sy.c == '#') ||
(r.sy.c == '_')
r.insert(new Symbol('\\', Default.literalColor), j);
j++;
<======
? (r.sy.c == '~') ||
(r.sy.c == '^')
r.insert(new Symbol('\\', Default.literalColor), j);
r.insert(new Symbol('}', Default.literalColor), j+2);
r.insert(new Symbol('{', Default.literalColor), j+2);
j+=3;
? nOrig != r.elements.size()
r.planSize();
<======
nextPrimitiveHeadType
byte nextPrimitiveHeadType(Scheme s, byte prev)
yledefineeritud
s - skeem, mille pa"is, prev - pa"ise tyyp
? (s instanceof Sketch)
??prev
? PrimitiveHead.SIMPLE:
<==============PrimitiveHead.LOOP
<==============PrimitiveHead.SWITCH
<==============PrimitiveHead.TRY
<==============PrimitiveHead.SIMPLE
<======
Branch haru korral lubab koiki pa"ise tyype
soltumata skeemi pa"isest
??prev
? PrimitiveHead.SIMPLE:
<==============PrimitiveHead.LOOP
<==============PrimitiveHead.SWITCH
..case
? PrimitiveHead.SWITCH:
<==============PrimitiveHead.CASE
<==============PrimitiveHead.DEFAULT
<==============PrimitiveHead.TRY
..cse
? PrimitiveHead.TRY:
<==============PrimitiveHead.CATCH
..case
? PrimitiveHead.CATCH:
<==============PrimitiveHead.FINALLY
<==============PrimitiveHead.SIMPLE
<======prev