public class SILKFileGrammar
extends java.lang.Object
ParserSILKFile
.
SILKFile -> Header, Body, end-tag-for-SILKin-data.
Header -> ""<?xml version=\"1.0\" encoding=\"UTF-8\" ?>"", "<!DOCTYPE SIL_KinData>", "< SIL_KinData >". First: [""<?xml version=\"1.0\" encoding=\"UTF-8\" ?>""] Follow: [tags: "<parameters>", "<editorSettings>", "<individualCensus>", "<familyCensus>", "<matrix>", "<dyadsUndefinedRef>", "<dyadsDefinedRef>", "<dyadsUndefinedAddr>", "<dyadsDefinedAddr>"]
Body -> "<parameters>", Parameters, "</parameters>", Body. | "<editorSettings>", EditorSettings, "</editorSettings>", Body. | "<individualCensus>", IndividualCensus, "</individualCensus>", Body. | "<familyCensus>", FamilyCensus, "</familyCensus>", Body. | "<matrix>", Matrix, "</matrix>", Body. | "<dyadsUndefinedRef>", DyadKinTerms, "</dyadsUndefinedRef>", Body. | "<dyadsDefinedRef>", DyadKinTerms, "</dyadsDefinedRef>", Body. | "<dyadsUndefinedAddr>", DyadKinTerms, "</dyadsUndefinedAddr>", Body. | "<dyadsDefinedAddr>", DyadKinTerms, "</dyadsDefinedAddr>", Body. | \empty. First: ["parameters", "editorSettings", "individualCensus", "familyCensus", "matrix", "dyadsUndefinedRef", "dyadsDefinedRef", "dyadsUndefinedAddr", "dyadsDefinedAddr"] Follow: [tag: "</SIL_KinData >"]
Parameters -> LangName, Theory1, Theory2, Comments, CreateDate, IndSerial, FamSerial, Poly, UDPs. First: ["<languageName>"] Follow: [tag: "</parameters>"]
LangName -> "<languageName>", symbol "</languageName>". First: ["<languageName>"] Follow: [tag: "<theory>"]
Theory1 -> "<theory>", string, "</theory>". First: ["<theory>"] Follow: [tags: "<theory>", "<comments>", "<createDate..." "<indSerialNum"]
Theory2 -> "<theory>", string, "</theory>". | \empty. First: ["<theory>"] Follow: [tags: "<comments>", "<createDate..." "<indSerialNum>"]
Comments -> "<comments>", string, "</comments>". | \empty. First: ["<comments>"] Follow: [tags: "<createDate..." "<indSerialNum>", "<dateOfBirth>", "</family>"]
CreateDate -> "<createDate value=", string, "/>". | \empty. First: ["<createDate>"] Follow: ["<indSerialNum>"]
IndSerial -> "<indSerNum>", integer, "</indSerNum>". First: ["<indSerNum>"] Follow: ["<famSerNum>"]
FamSerial -> "<famSerNum>", integer,"</famSerNum>". First: ["<famSerNum>"] Follow: ["<polygamyPermit>"]
Poly -> "<polygamyPermit>", boolean, "</polygamyPermit>". First: ["<polygamyPermit>"] Follow: [tags: "<UDP>", "</parameters>"]
UDPs -> "<UDP>", UDP, "</UDP>", UDPs. | \empty. First: ["<UDP>"] Follow: [tag: "</parameters>"]
UDP -> PropName, Type, ValueList, SingleVal, ValidEntries, DefVal, MinVal, MaxVal. First: [tag: "<propertyName>"] Follow: [tag: "</UDP>"]
PropName -> "<propertyName>", starName, "</propertyName>". First: [tag: "<propertyName>"] Follow: [tag: "<typ>"]
Type -> "<typ>", TypeSpec, "</typ>". First: [tag: "<typ>"] Follow: [tag: "<singleValue>"]
TypeSpec -> "integer". | "float". | "string". | "boolean". | "individual". First: [one of those] Follow: [tag: "</typ>"]
ValueList -> "<value>", Values, "</value>". First: [tag: "<value>"] Follow: [tag: "<singleValue>"]
Values -> DefaultValue, MoreValues. | \empty. First: [integer, float, string, boolean, Individual] Follow: [tag: "</value>"]
MoreValues -> comma, DefaultValue, MoreValues. | \empty. First: [comma] Follow: [comma, tag: "</value>"]
SingleVal -> "<singleValue>", boolean,"</singleValue>". First: [tag: "<singleValue>"] Follow: [see note 1]
ValidEntries -> "<validEntries>", ValEntries, "</validEntries>". First: [tag: "<validEntries>"] Follow: [tag: "<defaultValue>"]
ValEntries -> integer, ValEntries. | float, ValEntries. | string, ValEntries. | boolean, ValEntries. | Individual, ValEntries. | \empty. First: [see note 2] Follow: [tag: "</validEntries>"]
DefVal -> "<defaultValue>", DefaultValue, "</defaultValue>". First: [tag: "<defaultValue>"] Follow: [tag: "<minVal>"]
DefaultValue -> integer. // NOTE: Must agree with 'typ' for this UDP. | float. | string. | boolean. | Individual. | \empty. First: [integer, float, string, boolean, Individual] Follow: [comma, tags: "</defaultValue>", "</value>"]
MinVal -> "<minVal>", MinValue, "</minVal>". First: ["tag: <minVal>"] Follow: [tag: "<maxVal>"]
MinValue -> integer. | float. | string. | boolean. | Individual. | \empty. First: [see note 2] Follow: [tag: "</minVal>"]
MaxVal -> "<maxVal>", MaxValue,"</maxVal>". First: [tag: "<maxVal>"] Follow: [see note 1]
MaxValue -> integer. | float. | string. | boolean. | Individual. | \empty. First: [see note 2] Follow: [tag: "</maxVal>"]
EditorSettings -> CurrentEgo, EditDir, KAESParameters. First: [flag: <currentEgo>, <editDirectory>, <origin>] Follow: ["</editorSettings>"]
KAESParameters -> "<origin>", "<x>", integer, "</x>", "<y>", integer, "</y>", "</origin>", "<infoPerson>", integer, "</infoPerson>", "<infoMarriage>", integer, "</infoMarriage>", "<label>", integer, "</label>", "<editable>", boolean, "</editable>". First: [flag: <origin>] Follow: [flag: </editorSettings>]
IndividualCensus -> "<individualCensus>", Individuals, "</individualCensus>". First: [tag: "<individualCensus>"] Follow: [tag: "<familyCensus>"]
Individuals -> Individual, Individuals. | \empty. First: [tag: "<individual>"] Follow: [tags: "<individual>", "<familyCensus>"]
Individual -> "<individual>", Serial, Gender, Surname, FirstNames, Comments, Birth, Death, DataChg, Author, Deleted, BirthFam, Marriages, UDPs, StarLinks, "</individual>". First: [tag: "<individual>"] Follow: [tags: "<individual>", "</individualCensus>"]
Serial -> "<serialNmbr>", integer, "</serialNmbr>". First: [tag: "<serialNmbr>"] Follow: [tag: "<gender>"]
Gender -> "<gender>", symbol, "</gender>". // must be M or F First: [tag: "<gender>"] Follow: [tag: "<surname>"]
Surname -> "<surname>", string, "</surname>". First: [comtag: "<serialNmbr>"ma] Follow: [tag: "<firstNames>"]
FirstNames -> "<firstNames>", string, "</firstNames>". First: [tag: "<firstNames>"] Follow: [tag: "<dateOfBirth>"]
Birth -> "<dateOfBirth>", string, "</dateOfBirth>". // must be parsable as a date, or blank. First: [tag: "<dateOfBirth>"] Follow: [tag: "<dateOfDeath>"]
Death -> "<dateOfDeath>", string, "</dateOfDeath>". // must be parsable as a date, or blank. First: [tag: "<dateOfDeath>"] Follow: [tag: "<dataChangeDate>"]
DataChg -> "<dataChangeDate>", string, "</dataChangeDate>". // must be parsable as a date, or blank. First: [tag: "<dataChangeDate>"] Follow: [tags: "<dataAuthor>", "<comments>"]
Author -> "<dataAuthor>", string, "</dataAuthor>". First: [tag: "<dataAuthor>"] Follow: [tag: "<deleted>"]
Deleted -> "<deleted>", boolean, "</deleted>". First: [tag: "<deleted>"] Follow: [tag: "<birthFamily>"]
BirthFam -> "<birthFamily>", IntOrBlank, "</birthFamily>". First: [tag: "<birthFamily>"] Follow: [tag: "<marriages>"]
IntOrBlank -> integer. | \empty. First: [integer] Follow: [tag: "</birthFamily>"]
Marriages -> "<marriages>", Weddings, "</marriages>". First: [tag: "<marriages>"] Follow: [tag: "<userDefinedProperties>"]
Weddings -> integer, MoreWeds. | \empty. First: [integer] Follow: [tag: "</marriages>"]
MoreWeds -> comma, integer, MoreWeds. | \empty. First: [comma] Follow: [tag: "</marriages>"]
StarLinks -> "<starLinks>", Starz, "</starLinks>". First: [tag: "<starLinks>"] Follow: [tag: "</individual>"]
Starz -> "#", integer, MoreStarz. | \empty. First: [integer] Follow: [tag: "</starLinks>"]
MoreStarz -> comma, "#", integer, MoreStarz. | \empty. First: [comma] Follow: [tag: "</starLinks>"]
FamilyCensus -> "<familyCensus>", Families, "</familyCensus>". First: [tag: "<familyCensus>"] Follow: [tag: "<matrix>"]
Families -> Family, Families. | \empty. First: [tag: "<family>"] Follow: [tag: "</familyCensus>"]
Family -> "<family>", Serial, Deleted, Husband, Wife, Children, MarDate, DivDate, DataChg, Comments, "</family>". First: [tag: "<family>"] Follow: [tags: "<family>", "</familyCensus>"]
Husband -> "<husband>", integer, "</husband>". First: [tag: "<husband>"] Follow: [tag: "<wife>"]
Wife -> "<wife>", intger, "</wife>". First: [tag: "<wife>"] Follow: [tag: "<children>"]
Children -> "<children>", Kids, "</children>". | \empty. First: [tag: "<children>"] Follow: [tag: "<marriageDate>"]
Kids -> integer, MoreKids. | \empty. First: [integer] Follow: [tag: "</children>"]
MoreKids -> comma, integer, MoreKids. | \empty. First: [comma] Follow: [tag: "</children>"]
MarDate -> "<marriageDate>", string, "</marriageDate>". // must be parsable as a date, or blank. First: [tag: "<marriageDate>"] Follow: [tag: "<endDate>"]
DivDate -> "<endDate>", NullOrString. First: [tag: "<endDate>"] Follow: [tag: "<dataChangeDate>"]
NullOrString -> string, "</endDate>". // must be parsable as a date, or blank. | symbol, "</endDate>". // must be 'null' First: [string, symbol] Follow: [tag: "<dataChangeDate>"]
Matrix -> "<matrix>", Rows, "</matrix>". First: [tag: "<matrix>"] Follow: [tag: "<dyadsUndefinedRef>"]
Rows -> Row, Rows. | \empty. First: [tag: "<row>"] Follow: [tag: "</matrix>"]
Row -> "<row>", integer, Cells, "</row>". First: [tag: "<row>"] Follow: [tags: "<row>", "</matrix>"]
Cells -> Cell, Cells. | \empty. First: [tag: "<cell>"] Follow: [tag: "</row>"]
Cell -> "<cell>", integer, NodeComponents, TermGroups, "</cell>". First: [flag: "<cell>"] Follow: [tags: "</row>", "<cell>"]
NodeComponents -> "<pcString>", string, "</pcString>", "<level>", integer, "</level>", MiniPreds. First: [flag: "<indiv>"] Follow: [tags: "<PR>","<ER>","<XR>","<PA>","<EA>","<XA>","</cell>"]
TermGroups -> TermGroup, TermGroups. | \empty. First: [tags: "<PR>","<ER>","<XR>","<PA>","<EA>","<XA>"] Follow: [tag: "</cell>"]
TermGroup -> TGStartTag, TermStrings, TGEndTag. First: [tags: "<PR>","<ER>","<XR>","<PA>","<EA>","<XA>"] Follow: [tags: "</cell>","<PR>","<ER>","<XR>","<PA>","<EA>","<XA>"]
TGStartTag -> "<PR>". | "<ER>". | "<XR>". | "<PA>". | "<EA>". | "<XA>". First: [tags: one of those] Follow: [symbol]
TermStrings -> string, MoreTerms. First: [string] Follow: [tags: "</PR>","</ER>","</XR>","</PA>","</EA>","</XA>"]
MoreTerms -> comma, string, MoreTerms. | \empty. First: [comma] Follow: [tags: "</PR>","</ER>","</XR>","</PA>","</EA>","</XA>"]
TGEndTag -> "</PR>". | "</ER>". | "</XR>". | "</PA>". | "</EA>". | "</XA>". First: [tags: one of those] Follow: [tag: "</row>", "<cell>"]
DyadKinTerms -> DyadKinTerm, MoreKinTerms. First: [tag: "<dyadKinTerm>"] Follow: [tags: "</dyadsDefinedRef>", "</dyadsUndefinedRef>", "</dyadsDefinedAddr>", "</dyadsDefinedAddr>"]
MoreKinTerms -> DyadKinTerm, MoreKinTerms. | \empty. First: [tag: "<dyadKinTerm>"] Follow: [tags: "</dyadsDefinedRef>", "</dyadsUndefinedRef>", "</dyadsDefinedAddr>", "</dyadsDefinedAddr>"]
DyadKinTerm -> "<dyadKinTerm>", symbol, KinTypes, "</dyadKinTerm>". First: [tag: "<dyadKinTerm>"] Follow: [tags: "<dyadKinTerm>", "</dyadsDefinedRef>", "</dyadsUndefinedRef>", "</dyadsDefinedAddr>", "</dyadsDefinedAddr>"]
KinTypes -> KinType, MoreTypes. First: [tag: "<kinType>"] Follow: [tag: "</dyadKinTerm>"]
MoreTypes -> KinType, MoreTypes. | \empty. First: [tag: "<kinType>"] Follow: [tag: "</dyadKinTerm>"]
KinType -> "<kinType>", symbol, Dyads, "</kinType>". First: [tag: "<kinType>"] Follow: [tags: "<kinType>", "</dyadKinTerm>"]
Dyads -> Dyad, MoreDyads. First: [onePcTag] Follow: [tag: "</kinType>"]
MoreDyads -> Dyad, MoreDyads. | \empty. First: [onePcTag] Follow: [tag: "</kinType>"]
Dyad -> onePcTag. First: [onePcTag] Follow: [onePcTag, tag: "</kinType>"]
NOTE: a onePcTag consists of: "<dyad ", DyadComponents, " />". First: [tag: "<dyad"] Follow: [onePcTag, "</kinType>"]
DyadComponents -> "level=", IntString, DyadComponents. | "counters=", MultiIntString, DyadComponents. | "kinTermType=", IntString, DyadComponents. | "addOrRef=", IntString, DyadComponents. | "ego=", IntString, DyadComponents. | "alter=", IntString, DyadComponents. | "path=", MultiIntString, DyadComponents. | "confirmed=", string, DyadComponents. | "challenged=", string, DyadComponents. | \empty. First: [tags: "level=", "counters=", "kinTerm=", "kinTermType=", "addOrRef=", "ego=", "alter=", "path=", "confirmed=", "challenged="] Follow: [" />"]
IntString -> \", integer, \". First: [tags: "level=", "counters=", "kinTerm=", "kinTermType=", "addOrRef=", "ego=", "alter=", "path=", "confirmed=", "challenged="] Follow: [tags: same as First]
NOTE: MultiIntString is defined in CFG style, but it is implemented simply as a method that parses 0 or more integers from a string. MultiIntString -> \", PathInts, \". First: [tags: "level=", "counters=", "kinTerm=", "kinTermType=", "addOrRef=", "ego=", "alter=", "path=", "confirmed=", "challenged="] Follow: [tags: same as First]
PathInts -> integer, MoreInts. | \empty. First: [integer] Follow: [tag: "</path>"]
MoreInts -> comma, integer, MoreInts. | \empty. First: [comma] Follow: [tag: "</path>"]
Constructor and Description |
---|
SILKFileGrammar() |