AMADEUS html plain
import java.io.*;
class BaseLanguage_Partiid extends BaseLanguage
MUUDETUD
static AmFrame frame;
BaseLanguage_Partiid()
MUUDETUD
constructor
type = _PARTIID;
MUUDETUD
static boolean errorDetected;
PARSE
public boolean parse(SketchyText skt0,
main = source
SketchyText skt1,
main = parse result
AmFrame dialogTargetFrame)
Given: 1) plain skm-text skt0 (usually in the current window);
skt0 is assigned to its base language
2) skm-text skt1 -- waiting for result;
skt1.main contains only an empty branch;
skt1.main will be the root of resulting parse tree,
so corresponding to the non-terminal "Start( )";
if parse failed, skt1.main will contain the error message
Result: skt1 represents the parse tree of skt0
returns true
write skt0 (possibly preprocessed) to a plain text file :
String fileName = prepareSourceTextFile(skt0);
parse:
Sketch s = parse(fileName, skt0);
sketch s is now the resulting parse tree
(or conatains the error message)
replace skt1.main by s
the single branch of s ==> skt1.main.branch:
skt1.main.insert(s.branch(0), 0);
add branch
skt1.main.removeMember(1);
remove empty branch
assign base language:
skt1.main.baseLanguage =
BaseLanguage.newBaseLanguage(BaseLanguage.PARSETREE);
<======true
private Sketch parse(String fName0, SketchyText skt0)
Given: 1) plain text in file fName0;
2) the same plain skm-text (for error diagnostics)
Result: a sketch representing
the parse tree of the given plain text
or the error message
Sketch s = null;
parser: fName0 ==> Sketch s
!!
errorDetected = false;
s = _PartiidParser.parse(fName0);
MUUDETUD
! (FileNotFoundException e)
errorDetected = true;
String viga = e.getMessage();
System.out.println(viga);
s = errorMsgSketch(skt0, viga);
! (ParseException e)
errorDetected = true;
String viga = e.getMessage();
System.out.println(viga);
s = errorMsgSketch(skt0, viga);
s on nüüd parsipuu lihtskeem (või veateade)
<======s
private String prepareSourceTextFile(SketchyText skt0)
Given: current plain skm-text skt0
Result: given plain skm-text preprocessed
and written to (temporary) output file as plain text;
returns the output file name
or null, if preprocessing failed
Used by: parse and sketchify
String outputFileName = Default.tempSketchifyIn;
boolean failed = false;
preprocess skt0
? failed
<======null
write skt0 ==> output file
skt0.file = new AmFile(skt0);
skt0.file.name = outputFileName;
skt0.file.writeTextFile(outputFileName);
<======outputFileName
public static Sketch errorMsgSketch(SketchyText skt0, String viga)
<======BaseLanguageJavaCC.errorMsgSketch(skt0, viga)
SKETCHIFY
public boolean sketchify(SketchyText skt0,
main = source
SketchyText skt1,
main = result
AmFrame dialogTargetFrame)
Given: 1) plain skm-text skt0 (usually in the current window);
skt0 is assigned to its base language
2) skm-text skt1 -- waiting for result;
skt1.main contains only an empty branch;
skt1.main will be the root of resulting skm-text;
if failed, skt1.main will contain the error message
Result: skt1 represents the sketchified skt0
returns true
write skt0 (possibly preprocessed) to a plain text file :
String fileName = prepareSourceTextFile(skt0);
parse:
errorDetected = false; Sketch s = parse(fileName, skt0);
sketch s is now the resulting parse tree
(or conatains the error message)
? errorDetected
replace skt1.main by s
the single branch of s ==> skt1.main.branch:
skt1.main.insert(s.branch(0), 0);
add branch
skt1.main.removeMember(1);
remove empty branch
<======true
Sketch mudel = null;
import model
SketchyText skt = new SketchyText(null);
skt.file = new AmFile(skt);
skt.file.name = Default.modelsDirectory + "_PartiidModel.html";
MUUDETUD
? (new File(skt.file.name)).exists()
skt.frame = dialogTargetFrame;
skt.frame.contents = skt;
skt.file.importsFile();
mudel = skt.main;
? mudel == null
replace skt1.main by s
the single branch of s ==> skt1.main.branch:
skt1.main.insert(s.branch(0), 0);
add branch
skt1.main.removeMember(1);
remove empty branch
<======true
sketchify s(parse tee) ==> s(skm-text) using the model:
BaseLanguage.sketchifyParseTree(s, mudel);
s ==> s
s on nüüd analüüsipuust saadud, mudelile vastav skeem
(või teisendamata analüüsipuu, kui mudelit ei leitud)
s ja tema haru baaskeel on
tühi (None), kui haru sisu (liikmes-skeemid) ei ole ükskeelsed
haru liikmes-skeemide ühine baaskeel vastasel korral
replace skt1.main by s and set base language for outer schemes
byte ühisbaas = s.branch(0).baseLanguage.type;
s haru baaskeel
the single branch of s ==> skt1.main.branch:
skt1.main.insert(s.branch(0), 0);
add branch
skt1.main.removeMember(1);
remove empty branch
set base language:
skt1.main.baseLanguage = BaseLanguage.newBaseLanguage(ühisbaas);
postprocessResult(skt1);
<======true
private void postprocessResult(SketchyText skt1)
Antud: mudeli järgi skeemistatud skt1
Tulemus: antud skeemtekst on teisendatud
Kasutatakse: skeemistamisel järeltöötluseks
//REDUCE
public void reduce(Sketch s)
//NORMALIZE
public boolean normalize(SketchyText skt0, SketchyText skt1,AmFrame fr);
TEXTUALIZE
* static
boolean illegalSource;
String leadingSpaces;
String nestingStep = " ";
Branch br1;
branch of the result
public boolean textualize(SketchyText skt0,
main = skm-text
SketchyText skt1,
main = plain skm-text
AmFrame dialogTargetFrame)
illegalSource = false;
leadingSpaces = " ";
frame = dialogTargetFrame;
Sketch s0 = skt0.main;
Sketch s1 = skt1.main;
Branch br0 = s0.branch(0);
br1 = s1.branch(0); br1.body.removeElementAt(0);
* int i = 0, n = br0.body.size(); i < n; i++
Object o = br0.member(i);
? !(o instanceof Sketch)
illegalSource = true;
<======
assign base language:
BaseLanguage.setAll(skt1.main, skt0.main.baseLanguage.type);
<======! illegalSource
String reapuhver;
int maxrida = 67;
private void textualize(Sketch sk)
writeLine(" ");
writeLine(" ");
writeLine(textualizeHead(sk));
writeLine(" ");
leadingSpaces += nestingStep;
? sk.body.size() != 2
illegalSource = true;
<======
Branch br = sk.branch(1);
käikude väljastamine
reapuhver = "";
* int j = 0, n = br.body.size(); j < n; j++
Object o = br.member(j);
? !(o instanceof PrimitiveMember)
illegalSource = true;
<======
textualize((PrimitiveMember)o);
? reapuhver.length() > 0
writeLine(reapuhver);
reapuhver = "";
leadingSpaces -= nestingStep:
leadingSpaces = leadingSpaces.substring(
0, leadingSpaces.length() - nestingStep.length());
private void textualize(PrimitiveMember pm)
String t = pm.text.toString();
? t.equals("1-0")
reapuhver += " Valgete võit.";
<======
? t.equals("0-1")
reapuhver += " Mustade võit.";
<======
? t.equals("1/2-1/2")
reapuhver += " Viik.";
<======
? t.endsWith("#")
reapuhver += t.substring(0, t.length()-1)+ " Matt.";
<======
t = t.replace('x', ':');
t = t.replace('Q', 'L');
t = t.replace('R', 'V');
t = t.replace('B', 'O');
t = t.replace('N', 'R');
reapuhver += t + " ";
? reapuhver.length() >= maxrida
writeLine(reapuhver);
reapuhver = "";
private String textualizeHead(Sketch sk)
String nimi = sk.primitiveHead(0).text.toString().trim();
<======nimi
private void writeLine(String str)
Text newT = new Text();
newT.rows.removeElementAt(0);
newT.rows.addElement(
new Row(leadingSpaces + str, Default.foregroundColor));
br1.body.addElement(
new PrimitiveMember(Primitive.SIMPLE, newT));
//PREPARE TEX
public void prepareTex(Sketch s)
//Edit controls
byte nextPrimitiveMemberType(byte prev)
byte nextSchemeType(Scheme s)
byte typeForBranchHead(Sketch s)
byte nextPrimitiveHeadType(Scheme s, byte prev)