AMADEUS html plain
options
options {
JAVA_UNICODE_ESCAPE = true;
STATIC = false;
}
PARSER_BEGIN(FamilyParser)
FamilyParser <== parseri nimi
import java.io.*;
public class FamilyParser
FamilyParser <== parseri nimi
static Token t;
public static Sketch parse(String inputFileName)
throws ParseException, FileNotFoundException
FamilyParser parser =
FamilyParser <== parseri nimi
new FamilyParser(new FileReader(inputFileName));
FamilyParser <== parseri nimi
SimpleNode t = parser.Start();
<======BaseLanguageParseTree.toSketch(
t, FamilyParserTreeConstants.jjtNodeName)
FamilyParser <== parseri nimi
public static void main (String [] args)
FamilyParser parser;
FamilyParser <== parseri nimi
String filename = null;
long initTime = 0;
long parseTime = 0;
long startTime = 0;
long stopTime = 0;
L0:
{
{
if(
args.length == 0
){
System.out.println("Reading from standard input . . .");
parser = new FamilyParser(System.in);
FamilyParser <== parseri nimi
break L0;
}
}
{
if(
args.length == 1
){
filename = args[0];
System.out.println
("Reading from file " + filename + " . . .");
{try
{
startTime = System.currentTimeMillis();
parser = new FamilyParser(new java.io.FileInputStream(filename));
FamilyParser <== parseri nimi
stopTime = System.currentTimeMillis();
initTime = stopTime - startTime;
}
catch
(java.io.FileNotFoundException e)
{
System.out.println("File " + filename + " not found.");
return;
}
}
break L0;
}
}
System.out.println("Usage is one of:");
System.out.println(" java FamilyParser < inputfile");
FamilyParser <== parseri nimi
System.out.println("OR");
System.out.println(" java FamilyParser inputfile");
FamilyParser <== parseri nimi
return;
}
{try
{
startTime = System.currentTimeMillis();
SimpleNode n = parser.Start();
n.dump("");
stopTime = System.currentTimeMillis();
parseTime = stopTime - startTime;
System.out.println(" Text parsed " + filename +
" successfully in " + (initTime + parseTime) + " ms.");
System.out.println(" parser initialization time was " +
initTime + " ms.");
System.out.println(" parser parse time was " +
parseTime + " ms.");
}
catch
(ParseException e)
{
System.out.println(e.getMessage());
System.out.println("Encountered errors during parse.");
}
}
PARSER_END(FamilyParser)
FamilyParser <== parseri nimi
------- Grammatika -------
WHITE SPACE
/* WHITE SPACE */
SPECIAL_TOKEN :
{
" "
| "\t"
| "\r"
| "\f"
}
SPECIAL_TOKEN
SPECIAL_TOKEN :
{
< EOL: "\n" >
}
COMMENTS
/* COMMENTS */
MORE :
{
"//" : IN_SINGLE_LINE_COMMENT
|
<"/**" ~["/"]> { input_stream.backup(1); } : IN_FORMAL_COMMENT
|
"/*" : IN_MULTI_LINE_COMMENT
}
SPECIAL_TOKEN :
{
: DEFAULT
}
SPECIAL_TOKEN :
{
: DEFAULT
}
SPECIAL_TOKEN :
{
: DEFAULT
}
MORE :
{
< ~[] >
}
LITERALS
/* LITERALS */
TOKEN :
{
< INTEGER_LITERAL:
["1"-"9"] (["0"-"9"] | ".")* // ka kuupäev
>
|
< STRING_LITERAL:
"("
( (~[")"]) )* // kommentaar isikule (on sulgudes)
")"
>
}
IDENTIFIERS
/* IDENTIFIERS */
TOKEN :
{
< IDENTIFIER: ( | )* > // eeskätt nime osa
|
< #LETTER:
[
"-", "?",
"\u0024",
"\u0041"-"\u005a",
"\u005f",
"\u0061"-"\u007a",
"\u00c0"-"\u00d6",
"\u00d8"-"\u00f6",
"\u00f8"-"\u00ff",
"\u0100"-"\u1fff",
"\u3040"-"\u318f",
"\u3300"-"\u337f",
"\u3400"-"\u3d2d",
"\u4e00"-"\u9fff",
"\uf900"-"\ufaff"
]
>
|
< #DIGIT:
[
"\u0030"-"\u0039",
"\u0660"-"\u0669",
"\u06f0"-"\u06f9",
"\u0966"-"\u096f",
"\u09e6"-"\u09ef",
"\u0a66"-"\u0a6f",
"\u0ae6"-"\u0aef",
"\u0b66"-"\u0b6f",
"\u0be7"-"\u0bef",
"\u0c66"-"\u0c6f",
"\u0ce6"-"\u0cef",
"\u0d66"-"\u0d6f",
"\u0e50"-"\u0e59",
"\u0ed0"-"\u0ed9",
"\u1040"-"\u1049"
]
>
}
SEPARATORS
/* SEPARATORS */
TOKEN :
{
< LPAREN: "(" >
| < RPAREN: ")" >
| < LBRACE: "{" >
| < RBRACE: "}" >
| < LBRACKET: "[" >
| < TILDE: "~" >
| < RBRACKET: "]" >
}
TOKEN :
{
< ANYTHING_ELSE: ( ~[] ) >
}
images
void tIntegerLiteral() : {}{t = {jjtThis.addText(t.image);}}
void tIdentifier() : {}{t = {jjtThis.addText(t.image);}}
void tStringLiteral() : {}{t = {jjtThis.addText(
t.image.substring(1,t.image.length()-1));}}// sulgudeta
THE GRAMMAR SPECIFICATION
/************************************************
* THE GRAMMAR SPECIFICATION STARTS HERE *
************************************************/
SimpleNode Start() : {} // algussümbol
{
isik()
{ return jjtThis; }
}
Token isik() :
{
Token t = getToken(1);
}
{
"{" isikunimi() (isikuandmed())* (kooselu())* "}"
{ return t;}
}
void isikunimi():
{}
{
nimi()
}
void nimi() #void :
{}
{
(tIdentifier())+ // nimes ei saa oll kaldkriipsu '/'
}
void isikuandmed() :
{}
{
tStringLiteral()
}
void kooselu() :
{}
{
"[" "~" kaasa() (isikuandmed())* (laps())* "]"
// nimi() vabaabielu korral soovit: -- Nimi; teadmata partnetri korral: --
}
void kaasa() :
{}
{
(abiellumiseAeg())? kaasanimi()
}
void kaasanimi() #void :
{}
{
nimi()
}
void abiellumiseAeg() #void :
{}
{
tIntegerLiteral() // [[päev.]kuu.]aasta
}
void laps() #void :
{}
{
isik()
}