AMADEUS html plain
This sketchy text is generated by AMADEUS
UUE LISAMISEL MUUTA KOLMES KOHAS (vt "ASENDUS_KEEL_ ... ")
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");
valmis, võib üledefineerida:
Edit controls
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 sk = (Sketch)s;
? (sk.isMono() && s.isHeadless())
? sk.branch(0).body.size() > 0
<==========-1
saab avada
<==========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
prepareTex
void prepareTex(Sketch s)
TeX-valmistus baaskeelest sõltumata
prepareTexComment(s.comment);
* int j = 0, n = s.head.size(); j < n ; j++
prepareTexText(s.primitiveHead(j).text);
* int i = 0, n = s.body.size(); i < n; i++
Branch br = s.branch(i);
prepareTexComment(br.comment);
* int j = 0, m = br.head.size(); j < m; j++
prepareTexText(br.primitiveHead(j).text);
* int j = 0, m = br.body.size(); j < m; j++
Object o = br.member(j);
? o instanceof Sketch
Sketch sk = (Sketch)o;
sk.baseLanguage.prepareTex(sk);
<------
primitive
prepareTexText(((Primitive)o).text);
private static void prepareTexComment(Row r)
kommentaaris
int nOrig = r.elements.size();
* int j = 1, n = r.elements.size(); j < n; j++
r.getElement(j);
? r.sy != null
? r.sy.c == '_'
r.insert(new Symbol('\\', Default.literalColor), j);
j++;
? nOrig != r.elements.size()
r.planSize();
private static void prepareTexText(Text t)
text in primitive
* int i = 0, n = t.rows.size(); i < n; i++
Row r = t.row(i);
int nOrig = r.elements.size();
* int j = 1, m = r.elements.size(); j < m; j++
r.getElement(j);
? r.sy != null
..if
? (r.sy.c == '=') ||
(r.sy.c == '+') ||
(r.sy.c == '-') ||
(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.insert(new Symbol('\\', Default.literalColor), j);
r.insert(new Symbol('}', Default.literalColor), j+2);
r.insert(new Symbol('{', Default.literalColor), j+2);
j+=3;
<======
? (r.sy.c == '~')
r.remove(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('s', Default.literalColor), j);
r.insert(new Symbol('\\', Default.literalColor), j);
r.insert(new Symbol('$', Default.literalColor), j);
j+=5;
? nOrig != r.elements.size()
r.planSize();
prepareTexComment(t.comment);
static final byte NOT_A_CONST = (byte)-128;
currentSetOfBL
kasutatavate (aktiivsete) keelte konstandid (suvalises järjekorras)
static byte[] currentSetOfBL;
KASUTATUD KEELED, seatakse algselt: Am.start()
public static void initSetOfCurrentBlConst()
int N = items.length;
int loe = 0;
* int i = 0; i < N; i++
? isActive(getBlConst(items[i]))
loe++;
currentSetOfBL = new byte[loe];
* int i = 0, j = 0; i < N; i++
? isActive(getBlConst(items[i]))
currentSetOfBL[j++] = getBlConst(items[i]);
MUUDETAVAD UUE BAASKEELE LISAMISEL
KEELTE KONSTANDID
static final byte JAVA = 0;
static final byte LATEX = 1;
static final byte PARSETREE = 2;
static final byte NONE = 3;
static final byte XML = 4;
static final byte JAVACC = 5;
static final byte JAVA5 = 6;
static final byte LPN = 7;
static final byte FAMILY = 8;
static final byte _ALGJAVA = 9;
//static final byte KONST = 9;
ASENDUS_KEEL_LISA:KONST&++
static String[] items = kõigi keelte nimede loetelu (samas jrk.)
seda kasutab ka Item10Listener (Base + ?Current)
static String[] items =
KEELTE LOETELU
"Java"
,"LaTex"
,"ParseTree"
,"None"
,"XML"
,"JavaCC"
,"Java5"
,"LPN"
,"Family"
,"_AlgJava"
//,"Nimi"
ASENDUS_KEEL_LISA:Nimi
;
static BaseLanguage newBaseLanguage(byte type)
LISADA UUS KEEL
switch(type){
case JAVA: return new BaseLanguageJava();
case LATEX: return new BaseLanguageLaTex();
case PARSETREE: return new BaseLanguageParseTree();
case NONE: return new BaseLanguage0();
case XML: return new BaseLanguageXML();
case JAVACC: return new BaseLanguageJavaCC();
case JAVA5: return new BaseLanguageJava5();
case LPN: return new BaseLanguageLPN();
case FAMILY: return new BaseLanguageFamily();
case _ALGJAVA: return new BaseLanguage_AlgJava();
//case KONST: return new BaseLanguageNimi();
ASENDUS_KEEL_LISA:KONST&Nimi
default: return new BaseLanguage0();
}
public static boolean isActive(int type)
switch(type){
case JAVA: return false;
case LATEX: return false;
case PARSETREE: return false;
case NONE: return false;
case XML: return false;
case JAVACC: return false;
case JAVA5: return false;
case LPN: return false;
//case FAMILY: return true;
case _ALGJAVA: return true;
//case KONST: return true;
ASENDUS_KEEL_LISA:KONST
default: return false;
muidu: passiivne
}
static AmList list;
teisendused char <==> blConstant
plain Html import ja export jaoks JK 17.02.05
public static byte char2blConstant(char c)
Antud: c - skeemi baaskeele näitaja eksporditud failis
c vähim väärtus on '0'-1, suurim 206?
c ei saa olla '>' (HTML!)
Tulemus: vastava baaskeele konstant, vea korral: NONE
vt. char blConstant2char()
<======NONE
? (int)c < 47 || (int)c > 254
igaks juhuks
<======NONE
byte res;
? c == (char)47
res = (byte)14;
<======
? (int)c < 175
res = (byte)(c - '0');
<======
res = (byte)(127 - (c - '0') );
<======res
public static char blConstant2char(byte b)
Antud: baaskeele konstant b ( 0..127, -1..-78 )
Tulemus: baaskeele näitaja eksporditud failis
ei saa olla '<', '>', ''' (60,62,39)
vt. char2blConstant()
int a;
? b < 0
? b < -79
System.out.println("!! BaseLanguage:blConstant2char():blConstant < -79");
a = 127 + Math.abs(b);
<======
? a == 14
a + '0' == '>'
<======(char)47
<======(char)('0' + a)
byte type;
static String todayItem;
static String getBlName(byte blConst)
<======items[blConst]
static String getLastBlName()
<======items[items.length - 1]
static byte getBlConst(String blName)
alguse "_" ei arvestata
? blName.startsWith("_")
blName=blName.substring(1);
* int i = 0; i < items.length; i++
String s;
? items[i].startsWith("_")
s=items[i].substring(1);
<======
? s.equals(blName)
<==========(byte)i
<======NOT_A_CONST
kui sellist nime ei ole
static String[] getCurrentBlNames()
int n = currentSetOfBL.length;
String[] tulem = new String[n];
* int i = 0; i < n; i++
tulem[i] = getBlName(currentSetOfBL[i]);
return tulem;
//add2currentSet
static void xxxadd2currentSet(byte blKonst)
Antud: uue lemmiku konstant
int n = currentSetOfBL.length;
* int i = 0; i < n; i++
? currentSetOfBL[i] == blKonst
juba on?
<==========
lisada konst m lõppu:
byte[] mm = new byte[currentSetOfBL.length+1];
kanda olemasolevad üle
* int i = 0; i < currentSetOfBL.length; i++
mm[i] = currentSetOfBL[i];
mm[mm.length-1] = blKonst;
currentSetOfBL = mm;
public static boolean onRegistreeritud(String baaskeeleNimi)
//
String s = Default.baseLanguageRepository + "BaseLanguage" + baaskeeleNimi + ".html";
<==========AmFile.onOlemasURLfail(s)
<======!baaskeeleNimi.startsWith("_")
static boolean userSetAll(Scheme s, AmFrame frame)
küsib baaskeele kasutajalt
int bli = -999;
kompilaatorile
String[] todayItems = getCurrentBlNames();
//
panna lõppu kõigi valik
todayItems[todayItems.length - 1] = "..> "+AmLocale.All();
list = new AmList(todayItems);
AmDialog d = new AmDialog
(frame, AmLocale.Base_language(),AmDialog.B_SELECT_CANCEL,
AmLocale.Select_base_language()+".",
(AmList)list);
??d.getTulemus()
? AmDialog.CANCEL:
<==============false
? AmDialog.SELECT:
//JK 21.03.06 bli = list.getSelectedIndex();
//System.out.println("BaseLanguage: userSetAll:bli=" + bli);
//System.out.println("BaseLanguage: userSetAll:selectedValue=" + list.getSelectedValue());
bli = getBlConst((String)list.getSelectedValue());
JK 21.03.06
<======
//kõigi baaskeelte seast
? bli != todayItems.length - 1
viimane?
bli = getBlConst(todayItems[bli]);
<======
panna lõppu kõigi valik
list = new AmList(items);
d = new AmDialog
(frame, AmLocale.Base_language(),AmDialog.B_SELECT_CANCEL,
AmLocale.Select_base_language()+".",
(AmList)list);
??d.getTulemus()
? AmDialog.CANCEL:
<==================false
? AmDialog.SELECT:
bli = list.getSelectedIndex();
bli on saadud baaskeele konstant
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);
//NT
static boolean userRemoveLang(Frame frame)
lisatud NT-baaskeele kustutamiseks
String defDir = Default.AmadeusDirectory;
String proj_dir=defDir+"Portfolio\\";
//
String[] todayItems = new String[currentSetOfBL.length];
* int i = 0; i < todayItems.length; i++
todayItems[i] = items[(int)currentSetOfBL[i]];
list = new AmList(todayItems);
AmDialog d = new AmDialog
(frame, AmLocale.Base_language(),AmDialog.B_SELECT_CANCEL,
AmLocale.Select_base_language()+".",
(AmList)list);
kysib baaskeele kasutajalt
String[] todayItems = new String[items.length];
* int i = 0; i < todayItems.length; i++
todayItems[i] = items[i];
list = new AmList(todayItems);
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();
//BaseLanguage bl= new BaseLanguage(bli);
todayItem = items[bli];
System.out.println("Language for removing: "+bli+", keel:" + todayItem);
String proj_path =defDir+"Portfolio\\AmadeusProjekt.html";
? Item13Listener.langValidation(todayItem)==0
AmDialog d1 = new AmDialog(frame, AmLocale.Alert(),AmDialog.B_OK, AmLocale.Base_language_delete());
<======
? items.length-1==bli
AmDialog d2 = new AmDialog(frame, AmLocale.Alert(),AmDialog.B_YES_NO_CANCEL, AmLocale.Base_language_delete_final());
??d2.getTulemus()
? AmDialog.YES:
//System.out.println("YES");
Item13Listener.removeLangProjectFile(todayItem);
Item13Listener.removeLangFilesFinal(todayItem);
Item13Listener.openProjectFile(proj_path);
? AmDialog.CANCEL:
<==============false
? AmDialog.NO:
//System.out.println("NO");
Item13Listener.removeLangProjectFile(todayItem);
Item13Listener.removeLangFiles(todayItem);
Item13Listener.openProjectFile(proj_path);
<======
<======
Item13Listener.removeLangProjectFile(todayItem);
Item13Listener.removeLangFiles(todayItem);
Item13Listener.openProjectFile(proj_path);
<======
<======true
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);
seadaVälineBaaskeel(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
s.branch(0).baseLanguage = newBaseLanguage(
mudelsk.baseLanguage.type);
haru 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);
<------
-------------------- 21.01.05
lahendada primitiivliige
praegu puudulik, jääb lihtsalt paigale, pannakse tüüp mudelist, mitteterminali nimi maha
nooletüüpi ka ei arvestata
PrimitiveMember pm = (PrimitiveMember)o;
String komm = pm.text.comment.toString().trim();
? komm.startsWith("" + Default.parseSpecial)
otsida selle mt nimega primitiiv mudelis
pRes = null;
findPrimitive(mudel, komm);
//System.out.println("BAseLanguage:findPrimitive:komm:" + komm );
? pRes != null
//System.out.println("BAseLanguage:findPrimitive:pRes.text:" + pRes.text );
pm.type = pRes.type;
tüüp mudelist
<======
//System.out.println("BAseLanguage:findPrimitive: NOT FOUND" );
pm.text.comment.removeAll();
pm.text.comment.planSize();
-------------------- 21.01.05..
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);
s-l on juba uued harud
* int i = 0; i < s.body.size(); i++
Branch br = s.branch(i);
<======
ei ole muudetav skeem
res = null;
findScheme(mudel, smt);
Scheme mudelsk = res;
? mudelsk == null
<======
VIGA: mitteterminal smt puudub mudelis
? mudelsk instanceof Sketch
//System.out.println("BaseLanguage:sketch2branch s on Sketch" + smt );
int loeAlamskeemid = 0;
JK 20.01.2005
kas s kõik alamskeemid on mudelis harudena?
Branch b0 = (Branch)(s.member(0));
* int j = 0, n = b0.body.size(); j < n ; j++
14.01.05 JK *** (! oli br)
Object o = b0.member(j);
b0
? !(o instanceof Sketch)
<------
loeAlamskeemid++;
JK 20.01.2005
Sketch ss = (Sketch)o;
smt = mitteterminal(ss.comment, true);
? smt.equals("")
ei ole muudetav skeem
<----------
res = null;
findScheme(mudel, smt);
14.01.05 JK *** (! oli: mudelsk)
mudelsk = res;
? mudelsk == null
<==============
? mudelsk instanceof Sketch
<==============
? loeAlamskeemid > 0
JK 20.01.2005
//System.out.println("BaseLanguage:sketch2branch -> tehaHarud" + smt );
tehaHarud(s);
* 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, true);
14.01.05 JK *** (? oli: 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);
<==================
-------------------- 21.01.05
static Primitive pRes = null;
private static void findPrimitive(Sketch smu, String smt)
Mudeliskeemis smu otsitakse primitiivliiget, mille kommentaari lõpus on smt
* int i = 0; i < smu.body.size(); i++
Object o = smu.member(i);
Branch liige = (Branch)o;
//
smuMitteterm = mitteterminal(liige.comment, false);
? smuMitteterm.endsWith("*")
smuMitteterm =
smuMitteterm.substring(0, smuMitteterm.length()-1);
? smuMitteterm.equals(smt)
res = liige;
nool
* int j = 0; j < liige.body.size(); j++
o = liige.member(j);
? o instanceof Scheme
findPrimitive((Sketch)o, smt);
<==================
<------
o on primitiiv
Primitive pLiige = (Primitive)o;
String smuMitteterm = mitteterminal(pLiige.text.comment, false);
? smuMitteterm.endsWith("*")
smuMitteterm =
smuMitteterm.substring(0, smuMitteterm.length()-1);
? smuMitteterm.equals(smt)
pRes = pLiige;
<==============
-------------------- 21.01.05..
private static void täitaLüngadPäises(Sketch s)
LIHTSUSTATUD.
//Lünk on eraldi element kujul, see eeldus käib praegu veel kommentaari kohta
elementaarpäise tekst on üherealine, seal saab olla vaid 1 asendatav
º>mitteterminal (lõpus * kuulub kogu primitiivi juurde)
Object o = s.member(0);
Branch br = (Branch)o;
täita lüngad skeemikommentaaris
TODO
String asendatav = "";
Row asendajaRida;
kommentaaris
asendatav = asendus(s.comment, null);
? asendatav == null
<======
asendajaRida = võttaAsendusrida(br, asendatav);
? asendajaRida != null
asendus(s.comment, asendajaRida.toString());
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);
//String asendatav = "";
asendatav = "";
//Row asendajaRida;
kommentaaris
asendatav = asendus(t.comment, null);
? asendatav == null
<======
asendajaRida = võttaAsendusrida(br, asendatav);
? asendajaRida != null
asendus(t.comment, asendajaRida.toString());
tekstis
Row r0 = t.row(0);
asendatav = asendus(r0, null);
? asendatav == null
<==========
asendajaRida = võttaAsendusrida(br, asendatav);
? asendajaRida != null
asendus(r0, asendajaRida.toString());
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 String asendus(Row r, String asendaja)
leiab ja tagastab reas r oleva asendatava mitteterminali või null
kui asendaja != null, siis teeb ka asenduse (eeldus: kui on asendatav != null)
String rida0 = r.toString().trim();
String asendatav = null;
int i = rida0.indexOf(Default.parseSpecial +">");
? i == -1
<======null
pole asendatavat
asendatav = Default.parseSpecial + rida0.substring(i+2);
asendatavast lõpuni
int asendatavLen = asendatav.length() + 1;
1 tuleb < arvelt
int j = asendatav.indexOf(" ");
? j > -1
asendatav = asendatav.substring(0, j);
saba maha
asendatavLen = asendatav.length() + 1;
1 tuleb < arvelt
? asendatav.endsWith("*")
* maha
asendatav =
asendatav.substring(0, asendatav.length() - 1);
? asendaja == null
<======asendatav
asendamine:
eemaldada asendatav (alates kohast i+1, arvest: juhtsümbol)
* int k = 0; k < asendatavLen; k++
värv:
r.getElement(0);
Color col= r.sy.color;
int asendajaLen = asendaja.length();
lisada asendaja alates kohast i+1, arvest: juhtsümbol
* int k = 0; k < asendajaLen; k++
Symbol sy = new Symbol(asendaja.charAt(k), col);
r.insert(sy, i + 1 + k);
r.planSize();
<======asendatav
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++
lisatud: kui päiseteksti jäi nullike ja < siis see el.päis lihtsalt maha
String tekst = s.primitiveHead(i).text.toString();
int ind = tekst.indexOf(Default.parseSpecial + ">");
? ind > -1
s.removePrimitiveHead(i);
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);
<------
puhastada primitiivtekst:
PrimitiveMember pm = (PrimitiveMember)o;
Row r0 = pm.text.row(0);
AINULT ESIMENE RIDA
komm = r0.toString();
sama, mis päisetekstiga:
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;
pm.text.insert( new Row(komm, värv), 0);
pm.text.remove(1);
private static void seadaVälineBaaskeel(Sketch s)
byte ühisbaas = BaseLanguage.NONE;
Branch sHaru = s.branch(0);
leida ühine baaskeel s ainukeses harus
leida esimene alamskeem
Sketch esimSk = null;
* int i = 0, n = sHaru.body.size(); i < n; i++
Object o = sHaru.member(i);
? o instanceof Sketch
esimSk = (Sketch)o;
<======
? esimSk == null
polegi alamskeeme
<======
ühisbaas jääb NONE
byte esimBaas = esimSk.baseLanguage.type;
* int i = 0, n = sHaru.body.size(); i < n; i++
Object o = sHaru.member(i);
? o instanceof Sketch
? !Sketch.isMonoLanguage((Sketch)o, esimBaas)
<==========
pole ükskeelne, ühisbaas jääb NONE
s.baseLanguage = newBaseLanguage(ühisbaas);
sHaru.baseLanguage = newBaseLanguage(ühisbaas);
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