Scade One
中使用的建模语言 Swan
虽然是基于 Scade Suite
中Scade 6
的拓展,但在图形化语言特性的技术实现方面作了较大变化。对图形化建模部分,从由 RelaxNG schema 定义图形化Scade内容的组成1,到使用ENBF 形式化地定义 Swan 的图形化语法结构,使 Scade 技术的形式化语法定义范围,由文本标记法表达拓展到了图形化标记法表达。
Swan 图形化建模部分的EBNF形式化文法定义
在 Swan 的语言定义中,在词法部分新引入了diagram
关键字。diagram
是新引入的描述图形化建模程序的语法符号。在Swan 中,对图形化建模部分的 EBNF 语法如下描述
scope ::= ...
| diagram {{object}}
...
object ::= (description [[local_objects]])
local_objects ::= where {{ object }}
description ::= [[LUNUM]] [[LUID]] graph_item
| def_by_case
| scope_section
graph_item ::= expr expr
| def lhs
| block operator_block
| group [[group_operation]]
| wire connection => connection {{, connection }}
group_operation ::= ()
| byname
| bypos
connection ::= port [[group_adaption]]
| ()
port ::= instance_id
instance_id ::= LUNUM | LUID | self
在 Swan 中,对图形化表达的模型,以如上的文法形式描述。这一做法与Scade Suite
的做法有着显著的不同。在 Scade Suite
中,Scade 模型的图形化表达没有以 EBNF 形式化文法的方式描述,而是以 RelaxNG schema 规则描述的 XML 内容元素的结构组成规则。而在 Scade One
中,XML 文件持久化格式不再采用,对建模语言,使用ENBF 定义,对工具中的配置文件使用 JSON 定义。
因此,在Scade One
产品中,对语言部分语法(Syntax)的形式化定义的范围从原有的文本标记法(文本Scade模型),拓展到了图形化标记法(图形化Scade模型)。语言的定义形式更加统一。
Swan 图形化建模程序样例
Swan 语言图形化标记法形式的模型样例如下
node integrator ( i : f loat64 ) returns ( o : f loat64 ) {
diagram
(#1 $adder_1 block ( funct ion a , b = > a + b ))
(#2 $delay_1 expr pre #20
where (#20 group))
(#3 $init_1 expr 0.0 -> #30
where (#30 group))
(#4 expr i )
(#5 def o )
(wire #2 = > #30)
(wire #1 = > #20 , #5)
(wire #4 = > #1.(1))
(wire #3 = > #1.(2))
}
可以注意到 Swan 中的图形化程序的文本表示形式,相比 Scade Suite
中图形化模型的 XML 文件持久化形式(XScade)更加紧凑。