BIM建筑环境规则和分析(BERA)语言介绍(五)第四章 BERA语言定义

7 篇文章 0 订阅

            BERA语言定义

       本章定义了BERA语言语法的语法。语法处理语言的语法,它是一组规则,其中每个规则表达语言的句子。BERA的规范旨在正式定义语言的语法和语义,并提供其使用的初步文档。
       附录中还提供了完整的定义12和一些实施指南。 
       正如前面的背景和语言设计章节所述,BERA语言的语法结构与大多数编程语言类似,尤其是最近流行的面向对象语言,如Java和ECMAScripting 语言。BERA语言通常是面向对象的,程序性的和强类型的。必须在使用之前声明用户定义的元素,例如构建对象组和规则。这一点尤其重要,因为BERA与各种建筑信息模型(如IFC)相关联。BERA中的每个声明的语言元素与给定
建筑模型中的对应实体或属性具有强关联。BERA是一种用于定义和评估规则的语言,规则处理的是BERA对象模型(BOM)可以提供的许多属性。
       附录C中的定义是截至2010年秋季BERA语言的合理实现之一,采用EBNF无上下文语法的形式。它正在增长。本章使用其
片段描述它; 因此它们之间存在一些差异。(为清楚起见,本章中的一些定义从附录C中的定义中删除。)附录C中的定义是可执行的定义,实际上在以下章节中描述的BERA语言工具开发中使用。有关最新版本或其他资源,请参阅附录D:BERA语言用户
手册。

     因此,定义BERA对象对于规则定义及其执行都是至关重要的。这也是为什么BERA语言有一个过程式编程的概念,它被用作命令式编程的同义词。换句话说,当BERA语言在给定建筑模型之上运行时,BOM定义是第一步,然后将使用声明的对象遵循规则定义。最后一步当然是执行规则。它们具有数据依赖性[Booch等,1998]。
      这些对象声明或规则定义可以从外部数据集派生,例如预定义的库和外部BERA程序文件,因此,“导入”功能在BERA计划声明的开头也需要。BERA程序基本上具有以下四个组件:
1)BERA参考指令
2)BERA对象模型定义和声明
3)BERA规则定义
4)BERA执行语句
       BERA语言组件的基本过程如上所述; 
       然而,BERA语言还有另一个重要特征:嵌套。除了BERA 的语言范式外,主要是面向对象的概念; 这些过程组件可以嵌套在其他组件中以进行连续调用。在换句话说,对象声明可能会在规则定义或执行进行语句直接,例如在大括号或括号内。本章将介绍每个组件定义中的一些实用程序段和示例。
       在本章中,对于BERA语言的正式定义,将使用一些印刷约定来促进语言规范的通信。在除了普通文本之外,我们用固定宽度字体(这里是Courier New)描述了BERA的句法结构:

       EBNF词法和句法定义语句

       我们还提供了BERA语言代码的示例段,以提供语言使用的示例。为此,我们使用粗体固定宽度语言, 程序段本章描述的形式定义是基于EBNF的ANTLR规则[Parr,2008]。这里的术语“规则”是指这种形式表示中的低级词汇和句法定义。ANTLR是一个语言解析器生成器,它遵循传统的词法和句法规则和约定来表示继承自的语言语法Yacc [Johnson,1979]。根据Yacc的惯例,以
小写字母开头的非终端是句法规则,大写的非终端是词汇定义。(有关更多信息,请参阅附录A和B:
        本章中使用的EBNF和ANTLR 的metasyntax,用于在无上下文语法中表达BERA语言的语法。)
        最重要的是,非终端语法规则bProgram是起点BERA 语言定义。小写字母“b”表示BERA,其余字母表是简化标记以表示每个句法组件。其他四个非终端字面意思是上述四个组成部分。本章的正式定义是每个BERA组件部分介绍。

        附录C:BERA语言语法中描述了完整定义。 参见附录A. EBNF表示法作为无上下文语法定义。 作为EBNF表示法的简要概述,EBNF语法子规则如下。元素x,y和z表示语法片段。(见附录A)
        x | y | z : 完全匹配任何替代方案。 
        X? : x是可选的。 
     (X | Y | Z)?: 什么都不匹配或任何替代品。 
       x * :匹配x零次或多次。
    (x | y | z)* :匹配替代零次或多次。 
      x + :匹配x一次或多次。
   (x | y | z)+ :匹配替代一次或多次。

[1]定义:

     bProgrambProgram :bBeraProgram | BERABEGIN';' bBeraProgram BERAEND ';' ; 
     bBeraProgram :bReference?bBOMDef?bRuleDef?bExeStat?| ';' ; 

     BERA程序包含BERABEGIN和BERAEND,用于将其与可嵌入的其他语言程序(如Java或C#)分离。它取决于要为最终程序执行级别翻译和编译的目标语言。如果省略这样的begin-statement,则BERA识别器将所有输入代码视为纯BERA 语言到行尾。或者,如果存在目标语言分隔符,例如java; 或csharp; 它意味着以下语法是目标语言的语法。如果没有其他代码块指示符(如大括号或括号),则使用分号(;)来终止单个语句。BERA语言的详细词汇和句法规则在附录14中有详细描述。

     [1]定义中定义的四个主要定义:bBeraProgram    将在以下部分中描述:

    [2]定义:bReference,

   [3]定义:bBOMDef,
   [4]定义:bRuleDef,和

   [5]定义:bExeStat。
本章中涉及的所有定义和示例程序段都是语法正确的语句,由BERA语言解析器验证。

       参考声明
       参考声明(bReference)有两个子组件:引用语句(bRefStat)和构建类型(bBuildingTypeStat)声明。它们可以在实际的BERA程序中用作各种参考。它们是可选的,并由用户有选择地使用。引用声明主要依赖于后端实现,对导入外部数据集非常有用。主要目的是在没有附加程序或配置的情况下增强BERA语言的可用性。例如,a如上面的bProgram规则所示,符号基本上是EBNF,作为本章中用于定义BERA语言的无上下文语法。BERA的基本词法分析器和解析器由ANTLR实现为解析器生成器,因此本章中用于定义BERA语言的所有语句都是基于EBNF在ANTLR中可执行的实际代码。详细的实现问题将在下一章中介绍,附录章节还提供了有关BNF,EBNF和ANTLR的更多信息,以及BERA语言语法的完整源代码,包括特定于ANTLR的代码和注释。用于建立空间对象语义的构建类型特定的外部数据集[Lee JK,2010b]可以由用户加载。
       首先,bRefStat可用于:

       - 在一般编程语言中导入类似于指令的其他库,例如:Java中的import,C#中的using和C / C ++中的include。
       - 为建筑类型特定或项目相关的空间数据导入外部定义,

       - 为特定规则方案导入外部预定义规则,等等。 
       特别是关键字引用通过支持外部数据链接Internet协议,类似于在其应用程序中导入XML方案定义的方式。bProtocol和bURL定义它。
       其次,bBuildingTypeStat可用于:
     - 使用双引号字符串或大写字母的预定义建筑类型终端标记定义建筑类型。 bBuildingTypeStat为空间分析程序中的空间类型,属性和规则集提供参考。bRefStat语句允许许多实例,但bBuildingTypeStat只允许一个语句。 
     [2]定义:bReference

      bReference:bBuildingTypeStat bRefStat * | bRefStat + ;
      bBuildingTypeStat :BbuildingType (BID | bStringQuot)';' ; 
      bRefStat  : Breference bURL ';'  | Breference BID ('.' BID)* ';'  ; 
      bURL:'''bProtocol bURLadd''' ; 
      bProtocol :BProtocol ; 
      bURLadd :BID(BID |'/'|'。'|'%20')* ; 
      BID :BIDprefix(BIDprefix | BIDdigit)*; 
      BIDprefix:'a'..'z'|'A'..'Z'|'_'; 
      BIDdigit :'0'..'9'; 


       在这些句法规则中,并将广泛用于BERA的定义。它是一个基本的词法定义,可以通过BERA 程序中的任何变量名,空间名和规则名实例化。

       为清楚起见,本章中的语法定义中仅将BID用作终端令牌,而不带引号。将在实际词法分析器实现级别中定义和实现BID和相关终端的详细定义。
       引用声明部分主要依赖于其后端实现,与其他语言的类似指令相同,例如Java中的`import'。
可用的实现和库越多; 更有用的BERA参考将是适用于多种用途。这就是为什么BERA参考声明不仅支持访问本地路径,还支持网络访问Web URL。
        规则bReference中的有效BERA程序段的一些示例如下。
       1)参考bera.gsa.Courthouse; 
       2)buildingType“Courthouse”;       参考“http://bim.arch.gatech.edu/bera/USCDG.bom”; 
       3)buildingType“OfficeBuilding”; 
       参考bera.general.Office; 参考“http://bim.arch.gatech.edu/bera/Office.bera”; 

      BERA对象模型声明


     BERA对象模型
     BERA对象模型(BOM)是BERA语言的核心数据结构定义和实施。它是所有不同BERA 实施和环境的标准化数据结构; 而给定的建筑模型数据结构随其BIM引擎或平台而变化。例如,如图3.1所示,IFC数据结构由600多个实体组成,以明确表示建筑模型。这种外部数据结构对于在低级开发中实现后端BERA语言工具也很重要,因为它是BERA对象模型的原始数据。对于任何其他类型的本机构建模型,每个实现应该能够将它们转换为BERA对象模型。BERA用户应该访问尽可能多的数据建筑模型提供和BOM模型可以通过标准化访问对象和BERA对象模型。本节介绍用户如何访问BERA对象模型,而不是如何建立它。实施章节将处理有关处理给定建筑模型数据,运行中间执行程序和建立BERA对象模型的实际问题。因此,此处描述的所有语法定义和程序段都是在实际使用中定义和访问BERA对象模型的方法。对于其他类型的构建元素,它是一种开放式方案,可以响应BERA语言的可扩展性,如语言设计章节和实现章节所述。
       在本研究的范围内,空间是当前的主要目标BERA对象模型的实现。本节介绍静态/动态空间对象及其相关属性。在BERA对象模型的抽象世界中,建筑物由建筑物构成。特别是空间物体非常类似于人类惯例,它由地板和空间组成,每层都有另一组空间。在实际实现中实例化空间对象,在给定的建筑模型实例中定义实际空间对象。楼层对象是同一楼层中某种类型的空间组的预定义约定,并且还需要实例化许多其他类型的空间分类和组。对于例如,“部门”,“BOMA空间类别”或“防火安全区”可以代表一组
特定用途的空间物体。实际上,它们很重要,因为它们确定了每个空间与太空计划审查任务相关的其他属性。
       BERA定义了一个动态可实例化的对象对象组。特别是对于空间对象,它是SpaceGroup。BERA试图基于这些动态可实现的空间组对象来实现各种类型的空间分类。图4.1 以简化的UML [Booch等,1998]表示法描述了这些空间关系。一个虚线框是动态的对象,其他都是静态对象。SpaceGroup对象是可选,但如果其中任何一个被实例化,它将由至少一个或多个空间对象组成。它可以使用诸如ArrayList 之类的通用集合对象来实现在Java [ArrayList,2010]中。对这些空间对象使用点国家,空间组对象可以跟踪其组件空间和属性以建立自己的属性。如图3.2和3.3所示,一些与空间相关的对象,如门和楼梯对象,也参与了BERA对象模型的定义。它们用于定义空间的拓扑连接,度量循环图等。其他类型的建筑元素也可以以空间物体为中心,因为给定的建筑模型定义支持这些与空间的关系。
        研究范围内的BERA对象模型:空间对象。一个循环路径或火灾出口路径也是另一种类型的Space对象,作为动态实例化的对象。


        空间和空间组对象


        BERA语言中的主要对象基本上是“构建对象”,它们可以通过各种动态分配进行分组。在BERA对象模型的定义中,他们调用并动态实例化“构建对象组”,在本论文的范围内,它们是SpaceGroup,如图4.1所示。术语instantiable意味着“能够在实际程序执行中通过动态调用实例化”,正如面向对象编程中常见的那样[Gamma,1995; Goodrich,2005; 莱斯布里奇,2005年]。空间通常被明确地引用,并且它们在建筑模型中的正确命名对于BERA程序正确操作极其重要。在其他情况下,感兴趣的空间是动态地从模型导出的。一个重要的例子是用于循环遍历从一个空间到另一个空间的空间的推导。在这种情况下,聚合遍历空间内可能存在零个,一个或多个空间(如特定建筑模型中所定义)。在这些情况下,遍历生成一个空格列表(将被正式定义),该列表具有在
遍历中找到的有序空格列表。 
        语法定义之后描述了动态可实例化BOM 的声明,尤其是范围内的空间对象。BERA中的第二分量bBOMDef可以定义如下。一些非终端令牌与前者定义相关联:例如,BID的定义可在定义[2]中找到。在本章中定义是有点简化定义,但完整的定义是
在附录C是通过一般EBNF工具可执行诸如ANTLR说明。一些示例程序片段插入到以两个斜杠开头的行中(这意味着“注释”)。例如,以下是bBOMDecLine的示例:

//例如Space officeSpace = getSpace(“office”);
[3]定义:bBOMDef
bBOMDef :(bBOMDecLines | bBOMDefStat)+ ; 
bBOMDecLines :bBOMDecLine ; 

//例如Space officeSpace = getSpace(“office”);
bBOMDecLine  :bWrapSpaceType bDecSingle';' | bWrapStructureType bDecSingle';' ; 

//例如allRooms = getSpace(“room”); 
bDecSingle :BID'='bBOMGetter ; 

//例如getPath(“office”,“lobby”); 
bBOMGetter :(bGetterVerbs bBOMGetterP(('+'|' - ')bBOMGetter)?| bBOMGetterExpr ; 
bBOMGetterP  :'(' (bMultiBOMGetter | bBOMGetterExpr)')' ; 
bGetterVerbs :bBOMgetBOM | bVerbs(bWrapSpaceType | bWrapStructureType); 
bMultiBOMGetter :bStringRep | bStringQuotRep ; 
bBOMgetBOM :bBOMgetSpace | bBOMgetStructure ; 
bBOMgetSpace :BgetBuilding | BgetFloor | BgetSpace | BgetSpaceGroup | BgetPath ; 
bBOMgetStructure :BgetStructure | BgetSlab | BgetColumn | BgetWall | BgetDoor | BgetStair | BgetRamp ; 
bBOMDefStat :bDefineBOM ; 
bDefineBOM :bBOMDefStatDec bBOMDefBlock ; 
bBOMDefStatDec :Bdefine?bWrapSpaceType BID ; 
bBOMDefBlock :'{'(bBOMDecLines | bBOMPropExpr)+'}' ;
bBOMPropExpr :bBOMGetterExpr';' ; 
bBOMGetterExpr :bBOMGetterByBID | bBOMGetterByProp ; 

//例如Space.Floor.name =“Level_1”; 
bBOMGetterByProp :bLogic?(bQuantifier '。')?(bWrapSpaceType | bWrapStructureType) (('。'BID)|('。'(bQuantifier'。')?(bWrapSpaceType | bWrapStructureType))|('。'BFunction))+ bComparisonOperator?
(BID | bStringQuot |' - '?INTLITERAL |' - '?DOUBLELITERAL)?; 

//egpSpace.area> 500.60; 
bBOMGetterByBID :bLogic?(bQuantifier '。')?BID (('。'BID)|('。'(bQuantifier'。' )?(bWrapSpaceType | bWrapStructureType))| ('。'BFunction))+ bComparisonOperator?(BID | bStringQuot |' - '?INTLITERAL |' - '?
DOUBLELITERAL)?; 
bBOMExpr :((BQuantifier'。')?BID'。')?((BQuantifier'。')?(bWrapSpaceType'。'| bWrapStructureType'。'))+ 
(BQuantifier'。')?(BID | BFunction)+ ('。' BFunction)?; 
bQuantifier :BQuantifier ; 
bComparisonOperator :('='|'=='|'>'|'<'|'> ='|'<=')| bComparisonOperatorNegation ; 
bComparisonOperatorNegation :('!='|'!=='); 
         

       在实际的BERA程序中,用户不仅可以直接从建筑模型空间对象定义空间预定义的显式空间对象,还可以动态分组空间对象,例如循环路径,部门等。
       有效BERA程序段的一些示例规则bBOMDef内如下:
1)空格space1 = getSpace(“office”);
2)空间bigSpaces = getSpace(Spaces.area> 1000); 
3)SpaceGroup commonSpaces = getSpace(“corridor”)+ getSpace(“lobby”)getSpace(“private”); 
4)Path path1 = getPath(“office”,“lobby”); 
5)空间myOffice { 
Space.name =“office”; 
Space.area <500.0; 
Space.Floor.height> 10; 

6)地面lowGroundFloors { 
Floor.elevationHeight <100; 
Floor.number <6; 
Floor.number> = 1; 
}

         在示例2)中,用户变量bigSpaces包含来自给定模型的大于1,000 SF的所有空间对象。这是用户定义的SpaceGroup对象的示例,作为Space的集合。4)中的示例也是具有有序空间对象和路径的SpaceGroup 对象。因此,在这种情况下,BOM类型声明是Path。SpaceGroup对象由低级别的BOM处理程序处理,具有动态实例化的收集方法和自动转换。此空间对象声明也支持使用加号或减号表示的算术运算。它只是表示可以从一组空间组中添加或提取空间以支持用户定义动态空间分类。实际的程序段显示了这些示例。
       以上3)显示了这种情况。5)中的示例描述了用于定义名为“myOffice”的SpaceGroup实例的一系列条件,而6)中的示例是
名为“lowGroundFloors” 的用户定义的Floor 。这些5)和6)示例显示,用户可以使用Space 或Floor对象中定义的属性来定义自己的动态和不同的空间组。所有这些空间BOM都具有用户变量名称,并将用于规则或分析。将在实现章节中描述更详细的方面。
       对象属性
      本节将BOM的详细属性描述为另一个重要部分BERA对象模型。图4.2和4.3描述了BOM定义中的详细空间对象。来自IFC的基本属性被赋予数据,并且可以在每个对象实例上分配许多其他特定于域的属性,如框中所示。例如,空间对象可以具有GUID,名称,数字,区域,高度和体积作为通用属性。但是一个基本的可出租面积(RSF),作为的一个例子特定于域的属性,可以通过GSA扩展库中实现的ANSI / BOMA相关计算方法来计算[ANSI / BOMA,1996; Solibri,2010; GSA,2010a; GSA,2010b]。基本上,ifcSpace实例提供了一个NET区域,但基本RSF将提供额外的区域数据,用于计算建筑物的可用或可租用区域。通过这种方式,BERA对象模型在每个空间元素中具有多个属性,按四个类别分组。

      第一个属性类型是直接从构建模型派生的属性集。元素的名称,名义区域,相关元素属于此类别。

      第二种属性类型是通过附加获取的附加属性集计算,计算,从外部数据集派生等。示例包含可用的平方英尺,空间的可分配安全类型,BOMA类别等。

      第三个是基本的关系建筑元素,它直接来自给定的建筑信息。

      最后一种类型是可以从给定关系计算的附加关系,例如建筑物的第一层,相邻空间,可直接访问的空间等。图4.2和4.3显示了每个BOM上的这些示例。换句话说,非默认属性类型无法直接从给定模型派生,但BERA 库负责将它们计算为BERA中的中间执行语言工具在下一章中描述(请参阅实现部分5.3 中的BOM构建器)。有关此类属性的更多信息,请参见实现章节和附录D:BERA语言用户手册。


       可以通过点符号方法访问属性:      objectName.projectyName。 
       - 其中objectName和propertyName是非终端令牌。
       此外,点符号支持与相关对象,继承对象,函数调用等的链接,如同其他基于点符号的编程语言所支持的那样。关于图4.2的示例如下,其中空间和楼层是实例化的空间和楼层的对象:(更多实际用例参见表5.1)

1)space.height 
2)space.security 
3)space.basicRsf 
4)space.Floor.name 
5)floor.totalNetArea 
6)floor.Space.name


图4.2。空间对象及其属性:静态可实例化的BERA对象模型(BOM)。(参考表4.1,4.2和4.3,用于建筑,详细描述的地板,和空间物体)

       图4.3。空间对象及其属性:动态可实例化的BERA对象模型(BOM)。(有关SpaceGroup和Path对象的详细说明,请参阅表4.4和4.5 )图4.3中的对象类SpaceGroup和Path是可动态实例化的。

       图4.3显示了它们在SpaceGroup和Path之间的继承关系,这意味着SpaceGroup的所有属性都可用于Path。Path的一个实例是一个动态实例化的对象,通过用户调用getPath(),类似于一个SpaceGroup实例,可以通过getSpace()实例化,如定义中所定义以上。循环路径可以由一系列空间对象以及它的起始和结束空间表示,因此可以使用其相关的空间对象来追踪路径实例。

       关于图4.3的示例如下,其中myOffice和myPath分别是SpaceGroup和Path的实例化对象:
1)myOffice.area 
2)myOffice.numberOfSpace 
3)myOffice.Space.name 
4)myPath.distance 
5)myPath.numberOfTurn 
6 )myPath.area 
7)myPath.Floor.elevationHeight 65
        图4.4简单描述了不同类型对象的另一个链接。一个低级别的基于图形的循环分析和相关模块已经由研究小组在佐治亚理工学院。(有关本BERA语言工具开发中使用的图形结构的详细说明,请参阅6.3.2节。详细问题在论文中有描述:[Lee JK,A,2010; Lee J,2010]。)这些类型的用于空间表示或附加属性计算的元元素存储在BERA 库中,并将在实际的BERA执行中被调用和使用。他们目前正在建立实施BERA语言的循环特定功能,图4.4。的循环路径,作为一种类型的动态实例化的空间群的对象,可以由一组空间物体的表示,并且它可以与其它类型的链接,如图形(虚线方框)数据结构的通过附加BERA库中实现它。
       下表4.1至4.5描述了BOM的每个属性的详细描述:静态BOM,包括建筑物,楼层,空间和动态BOM,包括SpaceGroup和Path。属性名称列包含对每个属性的最简单的点符号访问,例如Space.area。在点符号表达式的实际使用中,动态可实例化的BOM对象(如SpaceGroup或Path)可以用用户定义的BOM名称替换:例如,“myOffices.area”或“fireEgressPaths.distance”。描述栏描述1)其数据类型,2)一般描述,可选地3)属性的示例值,以及可选地4)用于计算值的BERA 特定方法。表4.1到4.5中描述的属性在当前的BERA语言工具中实现,当然它们是开放式数据结构。某些属性是通用的,有些属于特定于域。这些对象属性的定义是下一版BERA语言工具的主要开发工作之一。(参见5.6 BERA语言可扩展性,横向和纵向可扩展性)
        表4.1。建筑物的属性和描述。
物业名称   说明    [数字] 
        从1 开始的BERA对象标识号。最后一个ID始终与 此BOM元素的总数Building.id 相同 。*在大多数情况下,Building是一个,
但BOM将它们定义为一个或多个作为所有其他对象。
Building.fileName [String]此建筑模型文件的名称。
[数字]对象计数。 Building.numberOf ... 
例如numberOfSpace,numberOfFloor,numberOfDoor,
numberOfWall,numberOfStair等.

Building.area [Numeric] 建筑物总面积。
[数字]此建筑物中空间的总净面积。Building.totalNetArea 所有空间净面积的总和。
[数字]建筑物离地面的高度。Building.height 所有地上楼层高度的总和。
[数字]建筑物建筑高度Building.elevationHeight 包括地下楼层。Building.volume [Numeric] 建筑物的总体积
[Site]一个站点可以有多个建筑物。(类似于Building.Site the Project。将在下一版本中详细说明。)
Building.Floor [Floor]此建筑物所包含的楼层对象。
[Floor] Floor Building ,这是Building.firstFloor 建筑的第一层。由楼层的海拔高度计算。
[String]此建筑的类型。BERA建筑类型声明指定了这一点。稍后, 将在BERA语言工具中更新特定的建筑类型
Building.buildingType 处理程序。
例如“办公楼”。 
[String]由对象Building.designPhase 计数,关系等推断出的设计阶段。 例如“Late Concept Design”。
[String] BIM创作工具的名称,用于导出Building.bimDesignTool 这个构建IFC的模型。 例如“Revit Architecture 2011” 
[String]建筑模型的记录版本或Building.version 其方案。例如“IFC 2X3” 
[数字]建筑物总面积。目前,这是与Building.area 相同的Building.buildingGrossArea。
Building.structuredParkingArea [Numeric]这栋楼的停车位总面积。
[数字] 此建筑物中的机械,电气和管道建筑物的总体空间。
[数字]总建筑皮肤面积。Building.skinArea externamWallArea和topViewArea 的总和。
Building.externalWallArea [Numeric] 总外墙的表面积。
Building.biggestFloorArea [Numeric]这栋楼最大楼层的面积。
表4.2。地板属性和描述。
属性名称    说明
[数字] BERA对象标识号 从1 开始Floor.id .最后一个ID始终与此BOM元素的总数相同。
Floor.GUID [String]来自IFC的全局唯一ID字符串。
Floor.name [String]此楼层的名称。例如“Level 1” 
Floor.area [Numeric]该楼层的总面积。
Floor.totalNetArea [数字]此楼层空间的总净面积。
Floor.height [数字]这个楼层的高度。[数字]从
Floor.elevationHeight 这个楼层的地面到底部的高度。
Floor.volume [数字]此楼层的数量。
Floor.Building [Building]包含该楼层的建筑物。
Floor.Space [Space]此楼层包含的空间对象。
[数字]分配给该楼层的计算编号。地上楼层总面积为1,2,... n,
Floor.number 地下楼层总是-1,-2,... -m。 
例如,如果这是二楼,则数字为2.如果这是第一层的第三层地下室,则数字为-3。
表4.3。空间属性和描述。
属性名称  说明
[数字] BERA对象标识号 从1 开始
Space.id .最后一个ID始终与此BOM元素的总数相同。
Space.GUID [String]来自IFC的全局唯一ID字符串。
Space.name [String]此空间的名称。例如“办公室”
Space.area [Numeric]这个空间的NET区域。
Space.height [Numeric]此空间的(天花板)高度。
Space.volume [Numeric]此空间的体积。[数字] 
Space.numberOfDoor 包含此空间对象的门数。
Space.Building [Building]包含此空间的构建对象。
Space.Floor [Floor]包含此空间的Floor对象。
Space.adjacentSpace [Space]与此空间相邻的空间对象。[Space] 
Space.directlyAccessibleSpace空间可直接访问的空间对象。

[数字]此空间的基本可出租面积(RSF)。
Space.basicRsf 请参阅ANSI / BOMA标准。[ANSI / BOMA,2010] AnANSI / BOMA特定属性。
[String]分配给此空间的部门名称。一个Space.department 
BIM创作工具相关的属性。例如“办公区”,“限制区”。
[String]分配给此空间的安全级别。一个
Space.security GSA的循环和特定的安全属性。
例如“公共”,“受限制”。
[String]分配给此空间的ANSI / BOMA空间类别。ANSI / BOMA特定属性。例如Space.bomaCategory “Office”,“Building Common”。请参阅ANSI / BOMA 标准。[ANSI / BOMA,2010] 
表4.4。SpaceGroup属性和描述。
属性名称   描述
[Numeric] BERA对象标识号,起始于SpaceGroup.id 1.最后一个id始终与此BOM元素的总数相同。
[String]此SpaceGroup.name 空间集合的用户定义名称。 例如“mySpaces”,“CirculationSpaces”。
[String]此BOM中元素的类型。在此SpaceGroup.type 版本的实现中,这只允许一种类型。
例如“空间”,“地板”,“路径”。
[Space]此SpaceGroup.Space 集合包含的Space对象。
SpaceGroup.Floor 
[Floor]此集合包含的Floor对象。
[Numeric]此SpaceGroup.numberOfSpace 集合中的Space对象数。
[Numeric]此SpaceGroup.numberOfFloor 集合中的Floor对象数。
[Numeric]此SpaceGroup的总面积。总和SpaceGroup.area 所有空间basicRsf的。
[Numeric]此SpaceGroup.height 集合中所有空间的平均高度。SpaceGroup.volume 
[Numeric]此空间集合的体积。
表4.5。路径属性和描述。
属性名称   说明
[数字] BERA对象标识号 从1 开始Path.id. 最后一个ID始终与此BOM元素的总数相同。
[String]此Path.name 空间集合的用户定义名称。 例如“myCirculationPath”,“fireExitPaths”。
[String]此Path.start 循环路径的起始空间的用户定义名称。
[String]此Path.end 循环路径的结束空间的用户定义名称。
[Space]此Path.startSpace 构建中实际检测到的启动Space对象。
[Space]此Path.endSpace 构建中实际检测到的End Space对象。
[Numeric] start和Path.depth 结束空间之间的空格数。
[Numeric]此路径实例的度量距离。Path.distance 算法描述于:[Lee JK,2010] Path.numberOfTurn 
[Numeric]此路径实例中的圈数。

数据值和操作


        点符号表达式是建议的简单直观的BOM访问。但它只是BERA语言程序中实际用于定义动态BOM和规则的操作数的一部分
。特别是,如本章的定义和示例所示,点符号是用于描述特定的左操作数条件。以点表示法,运算符和值的形式查看以下示例:
1)Space.area> 500 
2)Space.Floor.name =“Level 1” 
3)officeSpaces.Space.name!=“Lobby” 
4)path .distance <200 
5)lobbyArea.height> = 10.00
       由于基于点符号的BOM属性访问意味着,可以直观地读取和写入它们的含义。如前几节所述,BERA语言提供了两种属性值的数据类型:数字和字符串。对于字符串表达式,与其他语言一样,应使用双引号来阻止给定的字符串值。例如,Space.number是String数据类型,因为空格数是通常包含字符串字符,如N-101; 因此,它的数据类型是字符串而不是由双引号阻塞的数字,如下所示: 
Space.number =“302”

        左右操作数与操作员相互配对。运算符是特定于数据类型的。例如,尖括号(>,<)不应用于String数据类型。运算符可以如下使用:String的运算符:=,!=,== Numeric的运算符:>,> =,=,<,<=,!= 这些与其他公共语言运算符相同。符“!
=”表示 与Java语法相同的否定(不相等)。 BERA语言语法中的运算符表示没有什么新内容,但这里有一个特定于BERA语言的注释:等号和双 等号表示法具有特定于BERA和空间名称匹配的特定功能(在Java中, 双等号表示“逻辑相等” “)。请参阅附录D:BERA语言用户这个调整的手册。在实际使用中,“名称”字符串总是有问题的,因为它们是人类阅读的无限制字符[Lee JK,B,2010],并且BERA 语言语法试图使用这些相同的符号来处理问题。反映空间对象语义,BERA语言支持处理名称字符串问题的功能,因此等号“=”用作“语义相同名称” 的含义。例如,以下操作数不仅会选择名为“office” 的空格,还会选择“shared OFFICE-2”或“Tom's Office”。Space.name =“office” 但是,对于Numeric数据类型,等号表示法与其他表示法具有相同的含义。如果
BERA语言用户只想收集完全相同的字符串名称,只需对String数据类型使用双等号表示法,特别是对于空间名称。

         BERA语言中的这种预定义功能已经开发出来,反映了作者及其团队从实际项目中汲取的经验教训,以及一个需要更新的主题,以增强其“在键入空间名称字符串时掌握用户意图”的能力。

        BOM表达式的量化和连接
        本节描述了关注建筑物循环和空间规划的示例规则应用领域的一些问题,但也可用于其他类型的建筑对象或问题领域。基本上人们认识的不仅是一个房间,还有一组空间。实际上,人们在调用空间,区域或任何分组空间时不会考虑计算空间对象的数量。例如,当人们说“楼层公共区域”时,它通常意味着楼层上不同租户的共享区域,并且在计算上它是空间对象的集合包括共用厕所,洗手间,壁橱,电话室,机械空间,电梯大厅和同一楼层的公共走廊。如果BERA 在需要在BERA语言中实例化时严格规定空间对象的显式量化,则用户应根据返回值的数量对它们进行不同的定义。对于例如,如果一个建筑物有20个车位其名称为“办公室”,一个BERA声明getSpace(“办公室”)将在数组返回20个实例化的空间物体。因此,BERA语言总是使用一组数据来处理这种数量问题,特别是对于空间物体。这类似于包装类的概念Java的。使用这种包装器可以使人们减轻各种可能的量化问题,例如null,zero,one或many。无论结果值包含什么,它们都可以无错误地执行。这是BERA 语言定义中一个简单而重要的概念。 
空间和任何动态SpaceGroup对象将使用数据集合进行实例化,也就是说,单个实例的可能数量可以包含零个或多个实例,而无需任何特定的数量声明。换句话说,人们可以输入简化的声明使用Space而不是使用诸如Space []或Collection <Space>之类的显式声明,正如在Java中正式使用的那样。

        如上所述,这还能够对空间物体进行一些基本的算术运算。它将用于通过添加或提取一些相关空间来在某些目的中操纵动态空间组。添加一些空格将建立另一组空间组实例。对于循环和安全检查,作为另一个例子,可以添加或提取一些空间以计算特殊条件下两个空间之间的循环路径。作为示例,参见下面的例子:

      Floor.one.Space.name =“大厅”

       此示例与Floor.Space.name =“lobby”不同,这意味着基本上所有空格的名称应在特定楼层中为“lobby”。关于量化问题,将在实施和应用章节中描述许多示例。 
       以更好的表达方式处理BOM的另一个重要概念是OR 连接。这是一个声明:“办公室应该超过300,它们不应该位于地下”。

       这可以通过本章所述的以下点符号操作数集合来表示,其中“offices”是一个动态实例化的SpaceGroup对象,作为预定义的办公空间集合:offices.Space.area> offices.Floor.elevationHeight> = 0
考虑上例中的更改语句:“办公室应大于300,或者应位于地面层”。

        对于这种情况,BERA 语言支持OR连接如下:offices.Space.area> 300 或offices.Floor.elevationHeight> = 0 75

        换句话说,AND连接是默认的,但是在这种条件下需要时,用户应该编写OR连接。这是另一个量化问题的陈述:“至少有一个办公室应该大于500,或者应该位于一楼以上”。我们将这个数量用点符号表示如下:offices.one.Space.area> 500 或offices.Floor.elevationHeight> = 0 4.4。规则定义声明BERA程序的第三个组成部分是规则的定义。规则 定义类似于BOM定义,因为它也可以通过使用 点符号访问BOM以及通过量化和表达符号表达来获得优势。
        连接问题。它可以定义如下,并且一些非终端语法规则链接到前一个定义中的语法规则:bBOMDef。
BERA语法的完整定义见附录C. 
[4]定义:bRuleDef
bRuleDef :bRuleDefUnit + ; 
bRuleDefUnit :Bdefine?bDefType(':'bRuleType)?BID'('bParamDef ')'(EXTENDS BID)? '{' bRuleDefExpr * '}' ; 
bRuleDefExpr :bBOMPropExpr | bBOMDecLine ; 
bParamDef :bWrapSpaceType BID(','bWrapSpaceType BID)* ; 
        为了解决规则的复杂性,如语言设计章节中所述,应该在此定义中编码两个主要功能:

        1)提供对BERA对象模型提供的对象属性的轻松访问,以及

        2)允许丰富谓词表达各种规则语句,包括逻辑运算,逻辑值,递归,自动迭代,自动转换,否定,继承,多态等。点符号支持对量化问题的任何相关的属性访问在前一节中提到。一般构造语句定义将定义第二部分。这种条件语句和谓词使得BERA规则定义具有表现力。(目前在上面的EBNF中省略了这些结构的正式定义,重点关注四个主要组件。这将在实现中详细说明。)
BERA允许继承规则:BERA支持使用“extends”关键字的另一个实例化。如果需要使用用户定义的规则circRule1 定义另一个名为circRule2的规则,则可以使用语句扩展circRule1。circRule2的规则定义语句需要在circRule1的规则之上仅处理规则的新方面。
规则bRuleDef 中有效BERA程序段的一些示例如下:

1)规则myrule1(空格1){ 
space1.area> 500; 

2)第myrule2(空空间2){ 
space2.area> 1000; 
space2.Floor =“Level_1”; 
space2.security =“public”; 

3)规则circRule1(空间的开始,结束空间){ 
路径=的getPath(开始,结束); 
path.Space.security =“受限制”; 

4)规则circRule2(空间的开始,结束空间){ 
路径=的getPath(开始,结束); 
path.Space.security =“受限制”; 
path.one.Space.name =“gate”; 
或path.distance <10; 


BERA:bExeStat。与前三个BERA组件相同:bReference,bBOMDef和bRuleDef,bExeStat也是可选的,因为如果用户定义的规则以后用作“bReference” BERA程序类型的示例,则程序的执行不是必需的。BERA语法的完整定义见附录
C. bExeStat的定义如下: 
[5]定义:bExeStat
bExeStat :(bExeStatUnit)* ; 
bExeStatUnit :bRuleExeLines | bExeIfThenElseStat ; 
bRuleExeLines :bRuleExeLine ';' ; 
bRuleExeLine :(bRuleVerb | BID)'('bBlockExpr(','bBlockExpr)?')' ; 
bBlockExpr :BID | bWrapSpaceType | bWrapStructureType | bStringQuot | bBOMGetter ; 
bRuleVerb :Bget | Bcheck ; 
bExeIfThenElseStat:bExeIfStat bExeThenStat bExeElseStat?';' ; 
bExeIfStat :IF'('bRuleExeLine')' ; 
bExeThenStat :bRuleExeLine ; 
bExeElseStat :ELSE bRuleExeLine ; 
      规则bExeStat 中有效BERA程序段的一些示例如下,其中“mySpaces”,“officeSpaces”和“myPaths”是预定义的BOM 
名称,“myRule”和“myCirculationRule”是用户定义的规则名称:

1)得到(空间); 
2)得到(mySpaces); 得到(myPaths); 
3)myRule(“办公室”); MyRule的(officeSpaces); 
4)myRule(getSpace(“厕所”)); 
5)myCirculationRule(“lobby”,“entry”);
6)myCirculationRule(officeSpaces,mySpaces); 
7)如果myCirculationRule(“courtroom”,getSpace(Space.security = “secure”)),则myCirculationRule(“ courtroom ”,getSpace(Space.security =“restricted”)); 

       示例段4)和7)描述了嵌套的BERA语言组件。bBOMDef可以直接作为参数插入到规则语句中,并且对BOM 的点符号访问也可以用于某个参数传递。 

        BERA执行语句也易于新手用户读写,但还有另一种方法来处理和执行BERA对象。它是基于目标语言的执行语句,作为其他特定于域的语言。对于高级用户,使用Java或C#等目标语言访问BOM将允许在较低级别进行编程。

        BERA语言语法定义与其他编程语言一样是开放式的,但当然目标语言语法取决于每种语言。目标语言的执行不依赖于定义,而是依赖于BERA语言工具等实现。以下章节将描述BERA语言工具作为BERA语言定义的实现,下一个应用程序和评估章节将显示各种示例程序及其执行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值