AMADEUS html plain
//Grammatika BNF-produktsioonid on kõik void tagastusväärtusega...
options
PARSER EKFG1
PARSER_BEGIN(EKFG1)
import java.io.*;
public class EKFG1
static Sketch sketchify(String inputFileName)
throws ParseException, FileNotFoundException
EKFG1 parser = new EKFG1(new FileReader(inputFileName));
Sketch ret = parser.parsi();
<======ret
EKFG1 skeemteksti mudel
::tekst()
::osalause()*
c - CLB** või CLB-C** :clb(c) :
::sõnaAnalüüs()+
sõna ise või ka kvmärk
::sõna(s)
a - algvorm või ka kvmärk :algvorm(a) :analüüs()+
m - morf märgendid
::morfAnal(m)
s - sünt märgend
::süntAnal(s)*
PARSER_END(EKFG1)
LEKSEEMIDE KIRJELDUSED
TOKEN:
//Pole vaja eraldi % & ' > < *
SPACE ... MINUSMINUS
< SPACE: " " >
| < TAB: "\t">
| < NEWLINE: "\n">
| < RETURN: "\r">
| < EXC: "!" > //"\u0021"
| < QUO: "\""> //"\u0022"
| < HASH: "#" > //"\u0023"
| < DOL: "$" > //"\u0024"
| < LPA: "(" > //"\u0028"
| < RPA: ")" > //"\u0029"
| < PLUS: "+" > //"\u002B"
| < COMMA: "," > //"\u002C"
| < MINUS: "-" > //"\u002D"
| < DOT: "." > //"\u002E"
| < SLASH: "/" > //"\u002F"
| < COLON: ":" > //"\u003A"
| < SEMICOLON:";" > //"\u003B"
| < EQ: "=" > //"\u003D"
| < QUE: "?" > //"\u003F"
| < AT: "@" > //"\u0040"
| < LSQ: "[" > //"\u005B"
| < RSQ: "]" > //"\u005D"
| < LL: "_" > //"\u005F"
| < LAN: "«" > //"\u00AB"
| < RAN: "»" > //"\u00BB"
| < DOTDOT: "..">
| < DOTDOTDOT: "...">
| < MINUSMINUS: "--" >
A-Z a-z
//A-Z a-z
| < BASECHAR: ["\u0041"-"\u005A", "\u0061"-"\u007A", "\u00C0"-"\u00FF"] >
| < DIGIT: ["\u0030"-"\u0039"] >
| < BEGINNING: ["\u0000"-"\u0008", "\u000B", "\u000C", "\u000E"-"\u001f"] >
| < ELSEFORCHAR: [ "\u0000"-"\u00FF" ] >
//Kui syntaksi märke kah juurde hakkab tulema, siis kaotame ta TOKENina ära
| < SYNTAG:
(
( | ) ("FMV" | "FCV")
| "NEG"
| "SUBJ"
| "OBJ"
| "PRD"
| "ADVL"
| ("<" ("AN" | "AD" | "PN" | "NN" | "VN" | "INF_N" | "P" | "Q"))
| (("AN" | "AD" | "PN" | "NN" | "VN" | "INF_N" | "P" | "Q") ">")
| "J"
| "I"
)
>
parsi():
Sketch parsi():
Sketch s_ret = gen_tekst();
TEKST JA LAUSED
void tekst(Branch b_tekst):
Sketch s_osalause = null;
(
s_osalause = gen_osalause();
osalause(s_osalause.branch(0))
)+
void osalause(Branch b_osalause):
osalauseAlgus(b_osalause)
(
LOOKAHEAD(osalauseJätk(b_osalause))
osalauseJätk(b_osalause)
)*
void osalauseAlgus(Branch b):
Sketch s_sona = gen_sõnaAnalüüs();
Branch b_sona = null;
String so;
Token t;
(
(so = sõna() | so = kirjavahemärk())
s_sona.add(gen_sõna(so));
)
[tyhikud()]
reavahetus()
(
LOOKAHEAD(morfAnalüüs(b_sona) ("**CLB" | "**CLB-C"))
morfAnalüüs(b_sona)
(t = "**CLB" | t = "**CLB-C")
b.comment = gen_clb(t.image);
[tyhikud() synTags(b_sona) [tyhikud()]]
reavahetus()
)+
void osalauseJätk(Branch b):
Sketch s_sona = gen_sõnaAnalüüs();
Branch b_sona = null;
String so;
(
(so = sõna() | so = kirjavahemärk())
s_sona.add(gen_sõna(so));
)
[tyhikud()]
reavahetus()
(
LOOKAHEAD(morfAnalüüs(b_sona) [synTags(b_sona) [tyhikud()]] reavahetus())
morfAnalüüs(b_sona)
[synTags(b_sona) [tyhikud()]]
reavahetus()
)+
MORFOLOOGILINE INFO
void morfAnalüüs(Branch b):
//String av, mi = "";
//PrimitiveHead p = null;
//Text te = null;
Token t;
tyhikud()
(
algvorm(b) tyhikud() morfInfo(b)
|
t =
b.add(gen_morfAnal(t.image + t.image + t.image + t.image));
|
kirjavahemärgiAnalüüs(b)
)
[tyhikud()]
void algvorm(Branch b):
av = sõna()
(
(t = | t = | t = ) so = sõna()
)*
b.comment = gen_algvorm(av);
void morfInfo(Branch b):
StringBuffer mts = new StringBuffer();
//String mi;
//PrimitiveHead p = null;
//Text te = null;
//Token t;
morfTag(mts)
(
LOOKAHEAD(tyhikud() morfTag(mts)) tyhikud() morfTag(mts)
)*
[tyhikud()]
b.add(gen_morfAnal(mts.toString().trim()));
void morfTag(StringBuffer mts):
String so;
StringBuffer mt = new StringBuffer();
Token t1, t2;
(
t1 =
morfSona(mt)
t2 =
| t1 =
morfSona(mt)
| morfSona(mt)
)
mts.append(" " + mt.toString());
void morfSona(StringBuffer ms):
(
(t = | t = | t = | t = )
)+
KIRJAVAHEMÄRGI OSA
String kirjavahemärk():
(
t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t = ""
| t = ""
)
return "$" + t.image;
JK 07.05.02
void kirjavahemärgiAnalüüs(Branch b):
so = kirjavahemärk()
b.comment = gen_algvorm(so);
tyhikud() morfInfo(b)
SÜNTAKTILINE INFO
void synTags(Branch b):
Token t;
//PrimitiveMember p = null;
//Text te = null;
t =
b.add(gen_süntAnal(t.image));
(
LOOKAHEAD(tyhikud() )
tyhikud() t =
b.add(gen_süntAnal(t.image));
)*
ÜLDISED
void tyhikud():
void reavahetus():
String sõna():
(
// Sõnas ei tohi olla , , , et oleks algvormi kirjeldus 1:1
// Välja jätame ka , , - igasugu jutumärgid
// Sulud igasugused , , ,
// Ka ja on väljas, kuna #### on erimärk ja $ on süntaksiks
(
t=
t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
| t =
)
)+