diff --git a/examples/test.btl b/examples/test.btl new file mode 100644 index 0000000000000000000000000000000000000000..e0165e7ab2c6237f9a1ae1230058278cc423669d --- /dev/null +++ b/examples/test.btl @@ -0,0 +1,94 @@ +VERSION: "BTL V10.5" +BUILD: "10500" +EDITION: PREFABRICATION +[GENERAL] +PROJECTNUMBER: " " +PROJECTNAME: " " +PROJECTPART: " " +LISTNAME: "simple_wall" +CUSTOMER: " " +ARCHITECT: " " +EDITOR: " " +DELIVERYDATE: " " +EXPORTDATE: "2015-07-31" +EXPORTTIME: "11:44:51" +EXPORTRELEASE: "CADWORK-3D_21.0 Build: 803" +LANGUAGE: "fr" +RANGE: STANDARD +SCALEUNIT: 2 +COMPUTERNAME: "VUISTERNENS" +USER: "LResch" +SOURCEFILE: "C:\Users\lresch\Desktop\SME_robotics\simple_wall.3d" +EXPORTFILE: "C:\Users\lresch\Desktop\SME_robotics\simple_wall.btl" +RECESS: AUTOMATIC +[PART] +SINGLEMEMBERNUMBER: 2 +ASSEMBLYNUMBER: " " +ORDERNUMBER: 0 +DESIGNATION: "Semelle" +ANNOTATION: " " +STOREY: " " +GROUP: "SME_Robotics" +ELEMENTNUMBER: "SME_Robotics" +PACKAGE: " " +MATERIAL: "CF-Rab" +TIMBERGRADE: " " +QUALITYGRADE: " " +COUNT: 2 +LENGTH: 00125000 +HEIGHT: 00012000 +WIDTH: 00006000 +COLOUR: R:255 G:255 B: 0 A:100 +UID: 2320435 +TRANSFORMATION: OX:00000000 OY:00000000 OZ:00000000 XX:01000000 XY:00000000 XZ:00000000 YX:00000000 YY:01000000 YZ:00000000 +UID: 2320436 +TRANSFORMATION: OX:00000000 OY:00000000 OZ:00244000 XX:01000000 XY:00000000 XZ:00000000 YX:00000000 YY:01000000 YZ:00000000 +[COMPOSITE] +TYPE: LAYER +SINGLEMEMBERNUMBER: 3000003 +ASSEMBLYNUMBER: " " +ORDERNUMBER: 0 +DESIGNATION: "Couche porteuse" +ANNOTATION: " " +STOREY: " " +GROUP: "SME_Robotics" +ELEMENTNUMBER: "SME_Robotics" +PACKAGE: " " +MATERIAL: " " +TIMBERGRADE: " " +QUALITYGRADE: " " +COUNT: 1 +LENGTH: 00125000 +HEIGHT: 00012000 +WIDTH: 00250000 +COLOUR: R:255 G:255 B:255 A:100 +UID: 2323636 +TRANSFORMATION: OX:00000000 OY:00000000 OZ:00000000 XX:01000000 XY:00000000 XZ:00000000 YX:00000000 YY:01000000 YZ:00000000 +PROCESSKEY: 0-300-0 2: Semelle +REFERENCEPLANE: OX:00000000 OY:00000000 OZ:00000000 XX:00000100 XY:00000000 XZ:00000000 YX:00000000 YY:00000100 YZ:00000000 + +REFERENCEPLANE: OX:00000000 OY:00000000 OZ:00000000 XX:00000100 XY:00000000 XZ:00000000 YX:00000000 YY:00000100 YZ:00000000 +PROCESSPARAMETERS: UID: 2320435 +PROCESSINGQUALITY: AUTOMATIC +COMMENT: "2: Semelle" +PROCESSKEY: 0-300-0 2: Filiere +REFERENCEPLANE: OX:00000000 OY:00000000 OZ:00244000 XX:00000100 XY:00000000 XZ:00000000 YX:00000000 YY:00000100 YZ:00000000 +PROCESSPARAMETERS: UID: 2320436 +PROCESSINGQUALITY: AUTOMATIC +COMMENT: "2: Filiere" +PROCESSKEY: 0-300-0 3: Montant +REFERENCEPLANE: OX:00006000 OY:00000000 OZ:00006000 XX:00000000 XY:00000000 XZ:00000100 YX:00000000 YY:00000100 YZ:00000000 +PROCESSPARAMETERS: UID: 2320437 +PROCESSINGQUALITY: AUTOMATIC +COMMENT: "3: Montant" +PROCESSKEY: 0-300-0 3: Montant +REFERENCEPLANE: OX:00125000 OY:00000000 OZ:00006000 XX:00000000 XY:00000000 XZ:00000100 YX:00000000 YY:00000100 YZ:00000000 +PROCESSPARAMETERS: UID: 2320441 +PROCESSINGQUALITY: AUTOMATIC +COMMENT: "3: Montant" +PROCESSKEY: 0-300-0 3: Montant +REFERENCEPLANE: OX:00065500 OY:00000000 OZ:00006000 XX:00000000 XY:00000000 XZ:00000100 YX:00000000 YY:00000100 YZ:00000000 +PROCESSPARAMETERS: UID: 2320442 +PROCESSINGQUALITY: AUTOMATIC +COMMENT: "3: Montant" + diff --git a/spec/btl.ast b/spec/btl.ast index 9a63c3f892ab0718aa6f5b4200ec6d1444437443..a02902aae22ea0b582afb7f05a3fb30e655f61b2 100644 --- a/spec/btl.ast +++ b/spec/btl.ast @@ -7,6 +7,8 @@ BTL ::= Declaration*; abstract Value ::= <val:String>; Identifier : Value; IntLiteral : Value; +SpecialValue : Value; +SpecialLiteral : SpecialValue; StringValue : Value; abstract Declaration ::= Value; abstract ColourSpec : Declaration; @@ -32,6 +34,7 @@ AssemblyNumber : Declaration; Architect : Declaration ; Build : Declaration ; Colour : Declaration ::= Declaration*; +Comment : Declaration; ComputerName : Declaration; Count : Declaration; Customer : Declaration ; @@ -52,16 +55,21 @@ ListName : Declaration ; Material : Declaration; OrderNumber : Declaration; BTLPackage : Declaration; +ProcessingQuality : Declaration; +ProcessKey : Declaration ; +ProcessParameters : Declaration ; ProjectNumber : Declaration ; ProjectName : Declaration ; ProjectPart : Declaration ; QualityGrade : Declaration; +ReferencePlane : Declaration ::= Declaration*; ScaleUnit : Declaration; SingleMemberNumber : Declaration; SourceFile : Declaration; Storey : Declaration; TimberGrade : Declaration; Transformation : Declaration ::= Declaration*; +Type : Declaration; Range : Declaration; Recess : Declaration; UID : Declaration; @@ -69,5 +77,6 @@ User : Declaration; Version : Declaration ; Width : Declaration; abstract GroupDecl : Declaration ::= Declaration*; +CompositeGroup : GroupDecl; GeneralGroup : GroupDecl; -PartGroup : GroupDecl; \ No newline at end of file +PartGroup : GroupDecl; diff --git a/spec/btl.flex b/spec/btl.flex index 488cc3f23de3ebd47006ddd5378f95a053e32225..7bf279bc00a664a2568da1a539b960a1eeaeb377 100644 --- a/spec/btl.flex +++ b/spec/btl.flex @@ -40,10 +40,12 @@ import beaver.Scanner; WhiteSpace = [ ] | \t | \f | \n | \r | \r\n Identifier = [:jletter:][:jletterdigit:]* - IntLiteral = "-"?[0-9][0-9]* +IntLiteral = "-"?[0-9][0-9]* + %state YYINITIAL %state STRING +%state SPECIAL %% @@ -68,6 +70,7 @@ Identifier = [:jletter:][:jletterdigit:]* "ASSEMBLYNUMBER" { return symbol(Terminals.ASSEMBLYNUMBER); } "BUILD" { return symbol(Terminals.BUILD); } "COLOUR" { return symbol(Terminals.COLOUR); } + "COMMENT" { return symbol(Terminals.COMMENT); } "COMPOSITE" { return symbol(Terminals.COMPOSITE); } "COMPUTERNAME" { return symbol(Terminals.COMPUTERNAME); } @@ -92,16 +95,21 @@ Identifier = [:jletter:][:jletterdigit:]* "ORDERNUMBER" { return symbol(Terminals.ORDERNUMBER); } "PACKAGE" { return symbol(Terminals.PACKAGE); } "PART" { return symbol(Terminals.PART); } + "PROCESSINGQUALITY" { return symbol(Terminals.PROCESSINGQUALITY); } + "PROCESSKEY" { yybegin(SPECIAL);string.setLength(0);return symbol(Terminals.PROCESSKEY); } + "PROCESSPARAMETERS" { yybegin(SPECIAL);string.setLength(0);return symbol(Terminals.PROCESSPARAMETERS); } "PROJECTNUMBER" { return symbol(Terminals.PROJECTNUMBER); } "PROJECTNAME" { return symbol(Terminals.PROJECTNAME); } "PROJECTPART" { return symbol(Terminals.PROJECTPART); } "QUALITYGRADE" { return symbol(Terminals.QUALITYGRADE); } + "REFERENCEPLANE" { return symbol(Terminals.REFERENCEPLANE); } "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); } + "TYPE" { return symbol(Terminals.TYPE); } "RANGE" { return symbol(Terminals.RANGE); } "RECESS" { return symbol(Terminals.RECESS); } "UID" { return symbol(Terminals.UID); } @@ -123,6 +131,11 @@ Identifier = [:jletter:][:jletterdigit:]* <<EOF>> { return symbol(Terminals.EOF); } } +<SPECIAL> { + [\n|\r|\r\n] { yybegin(YYINITIAL); return symbol(Terminals.SPECIAL_LITERAL, string.toString()); } + [^\n\r]+ { string.append( yytext() ); } +} + <STRING> { \" { yybegin(YYINITIAL); return symbol(Terminals.STRING_LITERAL, diff --git a/spec/btl.parser b/spec/btl.parser index 3461c04196a4754f0add5f636de305f0a7a07b3e..50e05c3c4a2f56edc9d7bf521f617818159359ec 100644 --- a/spec/btl.parser +++ b/spec/btl.parser @@ -30,6 +30,7 @@ Declaration declaration = | 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); :} + | COMMENT COLON value.v {: return new Comment(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); :} @@ -50,21 +51,27 @@ Declaration declaration = | MATERIAL COLON value.v {: return new Material(v); :} | ORDERNUMBER COLON value.v {: return new OrderNumber(v); :} | PACKAGE COLON value.v {: return new BTLPackage(v); :} + | PROCESSINGQUALITY COLON value.v {: return new ProcessingQuality(v); :} + | PROCESSKEY special_value.v {: return new ProcessKey(v); :} + | PROCESSPARAMETERS special_value.v {: return new ProcessParameters(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); :} + | REFERENCEPLANE COLON coord_list.v {: return new ReferencePlane(new Identifier(REFERENCEPLANE),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); :} + | TRANSFORMATION COLON coord_list.v {: return new Transformation(new Identifier(TRANSFORMATION),v); :} + | TYPE COLON value.v {: return new Type(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 COMPOSITE.g RBRACKET declaration_list {: return new CompositeGroup(new Identifier(g),declaration_list); :} | 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); :} @@ -74,6 +81,9 @@ Value value = | IDENTIFIER.i {: return new Identifier(i); :} | INT_LITERAL.i {: return new IntLiteral(i); :} ; +SpecialValue special_value = + SPECIAL_LITERAL.i {: return new SpecialLiteral(i); :} + ; List colourSpec_list = colourSpec.c {: return new List().add(c); :} | colourSpec_list colourSpec {: return colourSpec_list.add(colourSpec); :}