diff --git a/spec/btl.ast b/spec/btl.ast index fa4aed370ba1a129768c265e90f489cb492c6d60..9a63c3f892ab0718aa6f5b4200ec6d1444437443 100644 --- a/spec/btl.ast +++ b/spec/btl.ast @@ -6,30 +6,68 @@ BTL ::= Declaration*; abstract Value ::= <val:String>; Identifier : Value; +IntLiteral : Value; StringValue : Value; abstract Declaration ::= Value; +abstract ColourSpec : Declaration; +abstract Coord : Declaration; + +A : ColourSpec; +B : ColourSpec; +G : ColourSpec; +R : ColourSpec; + +OX : Coord; +OY : Coord; +OZ : Coord; +XX : Coord; +XY : Coord; +XZ : Coord; +YX : Coord; +YY : Coord; +YZ : Coord; + +Annotation : Declaration; +AssemblyNumber : Declaration; Architect : Declaration ; Build : Declaration ; +Colour : Declaration ::= Declaration*; ComputerName : Declaration; +Count : Declaration; Customer : Declaration ; DeliveryDate : Declaration; +Designation : Declaration; Edition : Declaration; Editor : Declaration; +ElementNumber : Declaration; ExportDate : Declaration; ExportFile : Declaration; ExportRelease : Declaration; ExportTime : Declaration; +Group : Declaration; +Height : Declaration; Language : Declaration; +Length : Declaration; ListName : Declaration ; +Material : Declaration; +OrderNumber : Declaration; +BTLPackage : Declaration; ProjectNumber : Declaration ; ProjectName : Declaration ; ProjectPart : Declaration ; +QualityGrade : Declaration; ScaleUnit : Declaration; +SingleMemberNumber : Declaration; SourceFile : Declaration; +Storey : Declaration; +TimberGrade : Declaration; +Transformation : Declaration ::= Declaration*; Range : Declaration; Recess : Declaration; +UID : Declaration; User : Declaration; Version : Declaration ; -abstract Group : Declaration ::= Declaration*; -GeneralGroup : Group; -PartGroup : Group; \ No newline at end of file +Width : Declaration; +abstract GroupDecl : Declaration ::= Declaration*; +GeneralGroup : GroupDecl; +PartGroup : GroupDecl; \ No newline at end of file diff --git a/spec/btl.flex b/spec/btl.flex index a9f8fe846eb64e39544cdd3c22d2515377ef1cf9..488cc3f23de3ebd47006ddd5378f95a053e32225 100644 --- a/spec/btl.flex +++ b/spec/btl.flex @@ -20,17 +20,18 @@ import beaver.Scanner; // store line and column information in the tokens %line %column - +%unicode + // this code will be inlined in the body of the generated scanner class %{ StringBuffer string = new StringBuffer(); // Sym sym; private Symbol symbol(short type) { - return new Symbol(type, yyline, yycolumn, yylength(), yytext()); + return new Symbol(type, yyline+1, yycolumn+1, yylength(), yytext()); } private Symbol symbol(short type, Object value) { - return new Symbol(type, yyline, yycolumn, yylength(), value); + return new Symbol(type, yyline+1, yycolumn+1, yylength(), value); } // private beaver.Symbol sym(short id) { // return new beaver.Symbol(id, yyline + 1, yycolumn + 1, yylength(), yytext()); @@ -38,8 +39,9 @@ import beaver.Scanner; %} WhiteSpace = [ ] | \t | \f | \n | \r | \r\n -Identifier = [:jletterdigit:][:jletterdigit:]* - +Identifier = [:jletter:][:jletterdigit:]* + IntLiteral = "-"?[0-9][0-9]* + %state YYINITIAL %state STRING @@ -48,31 +50,66 @@ Identifier = [:jletterdigit:][:jletterdigit:]* <YYINITIAL> { // token definitions + "A" { return symbol(Terminals.A); } + "B" { return symbol(Terminals.B); } + "G" { return symbol(Terminals.G); } + "R" { return symbol(Terminals.R); } + "OX" { return symbol(Terminals.OX); } + "OY" { return symbol(Terminals.OY); } + "OZ" { return symbol(Terminals.OZ); } + "XX" { return symbol(Terminals.XX); } + "XY" { return symbol(Terminals.XY); } + "XZ" { return symbol(Terminals.XZ); } + "YX" { return symbol(Terminals.YX); } + "YY" { return symbol(Terminals.YY); } + "YZ" { return symbol(Terminals.YZ); } + "ANNOTATION" { return symbol(Terminals.ANNOTATION); } "ARCHITECT" { return symbol(Terminals.ARCHITECT); } + "ASSEMBLYNUMBER" { return symbol(Terminals.ASSEMBLYNUMBER); } "BUILD" { return symbol(Terminals.BUILD); } + "COLOUR" { return symbol(Terminals.COLOUR); } + "COMPOSITE" { return symbol(Terminals.COMPOSITE); } + "COMPUTERNAME" { return symbol(Terminals.COMPUTERNAME); } + "COUNT" { return symbol(Terminals.COUNT); } "CUSTOMER" { return symbol(Terminals.CUSTOMER); } "DELIVERYDATE" { return symbol(Terminals.DELIVERYDATE); } + "DESIGNATION" { return symbol(Terminals.DESIGNATION); } "EDITION" { return symbol(Terminals.EDITION); } "EDITOR" { return symbol(Terminals.EDITOR); } + "ELEMENTNUMBER" { return symbol(Terminals.ELEMENTNUMBER); } "EXPORTDATE" { return symbol(Terminals.EXPORTDATE); } "EXPORTFILE" { return symbol(Terminals.EXPORTFILE); } "EXPORTRELEASE" { return symbol(Terminals.EXPORTRELEASE); } "EXPORTTIME" { return symbol(Terminals.EXPORTTIME); } "GENERAL" { return symbol(Terminals.GENERAL); } + "GROUP" { return symbol(Terminals.GROUP); } + "HEIGHT" { return symbol(Terminals.HEIGHT); } "LANGUAGE" { return symbol(Terminals.LANGUAGE); } + "LENGTH" { return symbol(Terminals.LENGTH); } "LISTNAME" { return symbol(Terminals.LISTNAME); } + "MATERIAL" { return symbol(Terminals.MATERIAL); } + "ORDERNUMBER" { return symbol(Terminals.ORDERNUMBER); } + "PACKAGE" { return symbol(Terminals.PACKAGE); } "PART" { return symbol(Terminals.PART); } "PROJECTNUMBER" { return symbol(Terminals.PROJECTNUMBER); } "PROJECTNAME" { return symbol(Terminals.PROJECTNAME); } "PROJECTPART" { return symbol(Terminals.PROJECTPART); } + "QUALITYGRADE" { return symbol(Terminals.QUALITYGRADE); } "SCALEUNIT" { return symbol(Terminals.SCALEUNIT); } + "SINGLEMEMBERNUMBER" { return symbol(Terminals.SINGLEMEMBERNUMBER); } "SOURCEFILE" { return symbol(Terminals.SOURCEFILE); } + "STOREY" { return symbol(Terminals.STOREY); } + "TIMBERGRADE" { return symbol(Terminals.TIMBERGRADE); } + "TRANSFORMATION" { return symbol(Terminals.TRANSFORMATION); } "RANGE" { return symbol(Terminals.RANGE); } "RECESS" { return symbol(Terminals.RECESS); } + "UID" { return symbol(Terminals.UID); } "USER" { return symbol(Terminals.USER); } "VERSION" { return symbol(Terminals.VERSION); } + "WIDTH" { return symbol(Terminals.WIDTH); } {Identifier} { return symbol(Terminals.IDENTIFIER, yytext()); } + {IntLiteral} { return symbol(Terminals.INT_LITERAL, yytext()); } ":" { return symbol(Terminals.COLON); } "[" { return symbol(Terminals.LBRACKET); } "]" { return symbol(Terminals.RBRACKET); } diff --git a/spec/btl.parser b/spec/btl.parser index 3514aaff4675cd65f3383a94f26cb0c3a9640244..3461c04196a4754f0add5f636de305f0a7a07b3e 100644 --- a/spec/btl.parser +++ b/spec/btl.parser @@ -25,27 +25,46 @@ List declaration_list = Declaration declaration = VERSION COLON value.v {: return new Version(v); :} + | ANNOTATION COLON value.v {: return new Annotation(v); :} | ARCHITECT COLON value.v {: return new Architect(v); :} + | ASSEMBLYNUMBER COLON value.v {: return new AssemblyNumber(v); :} | BUILD COLON value.v {: return new Build(v); :} + | COLOUR COLON colourSpec_list.v {: return new Colour(new Identifier(COLOUR),v); :} | COMPUTERNAME COLON value.v {: return new ComputerName(v); :} + | COUNT COLON value.v {: return new Count(v); :} | CUSTOMER COLON value.v {: return new Customer(v); :} | DELIVERYDATE COLON value.v {: return new DeliveryDate(v); :} + | DESIGNATION COLON value.v {: return new Designation(v); :} | EDITION COLON value.v {: return new Edition(v); :} | EDITOR COLON value.v {: return new Editor(v); :} - | EXPORTDATE COLON value.v {: return new ExportDate(v); :} + | ELEMENTNUMBER COLON value.v {: return new ElementNumber(v); :} + | EXPORTDATE COLON value.v {: return new ExportDate(v); :} | EXPORTFILE COLON value.v {: return new ExportFile(v); :} | EXPORTRELEASE COLON value.v {: return new ExportRelease(v); :} | EXPORTTIME COLON value.v {: return new ExportTime(v); :} + | GROUP COLON value.v {: return new Group(v); :} + | HEIGHT COLON value.v {: return new Height(v); :} | LANGUAGE COLON value.v {: return new Language(v); :} + | LENGTH COLON value.v {: return new Length(v); :} | LISTNAME COLON value.v {: return new ListName(v); :} + | MATERIAL COLON value.v {: return new Material(v); :} + | ORDERNUMBER COLON value.v {: return new OrderNumber(v); :} + | PACKAGE COLON value.v {: return new BTLPackage(v); :} | PROJECTNUMBER COLON value.v {: return new ProjectNumber(v); :} | PROJECTNAME COLON value.v {: return new ProjectName(v); :} | PROJECTPART COLON value.v {: return new ProjectPart(v); :} + | QUALITYGRADE COLON value.v {: return new QualityGrade(v); :} | SCALEUNIT COLON value.v {: return new ScaleUnit(v); :} + | SINGLEMEMBERNUMBER COLON value.v {: return new SingleMemberNumber(v); :} | SOURCEFILE COLON value.v {: return new SourceFile(v); :} + | STOREY COLON value.v {: return new Storey(v); :} + | TIMBERGRADE COLON value.v {: return new TimberGrade(v); :} + | TRANSFORMATION COLON coord_list.v {: return new Transformation(new Identifier(TRANSFORMATION),v); :} | RANGE COLON value.v {: return new Range(v); :} | RECESS COLON value.v {: return new Recess(v); :} + | UID COLON value.v {: return new UID(v); :} | USER COLON value.v {: return new User(v); :} + | WIDTH COLON value.v {: return new Width(v); :} | LBRACKET GENERAL.g RBRACKET declaration_list {: return new GeneralGroup(new Identifier(g),declaration_list); :} | LBRACKET PART.p RBRACKET declaration_list {: return new PartGroup(new Identifier(p),declaration_list); :} // | TRANS IDENTIFIER.ID1 COLON IDENTIFIER.ID2 ARROW IDENTIFIER.ID3 SEMI {: return new Transition(ID1, ID2, ID3); :} @@ -53,4 +72,30 @@ Declaration declaration = Value value = STRING_LITERAL.s {: return new StringValue(s); :} | IDENTIFIER.i {: return new Identifier(i); :} + | INT_LITERAL.i {: return new IntLiteral(i); :} ; +List colourSpec_list = + colourSpec.c {: return new List().add(c); :} + | colourSpec_list colourSpec {: return colourSpec_list.add(colourSpec); :} + ; +ColourSpec colourSpec = + A COLON value {: return new A(value); :} + | B COLON value {: return new B(value); :} + | G COLON value {: return new G(value); :} + | R COLON value {: return new R(value); :} + ; +List coord_list = + coord.c {: return new List().add(c); :} + | coord_list coord {: return coord_list.add(coord); :} + ; +Coord coord = + OX COLON value {: return new OX(value); :} + | OY COLON value {: return new OY(value); :} + | OZ COLON value {: return new OZ(value); :} + | XX COLON value {: return new XX(value); :} + | XY COLON value {: return new XY(value); :} + | XZ COLON value {: return new XZ(value); :} + | YX COLON value {: return new YX(value); :} + | YY COLON value {: return new YY(value); :} + | YZ COLON value {: return new YZ(value); :} + ;