当前位置: 首页 > web >正文

[Scade One] Swan 图形化建模技术的形式化文法

Scade One 中使用的建模语言 Swan 虽然是基于 Scade SuiteScade 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 #20where (#20 group))(#3 $init_1 expr 0.0 -> #30where (#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)更加紧凑。

http://www.xdnf.cn/news/712.html

相关文章:

  • 如何快速的搭建可用的付费网盘站点,实现盈利:新版网盘系统源码,全新构架,局部新颖,功能齐全,可自用可运营,可正常用于生产,2025年搭建付费网盘系统首选!
  • python绘制正态分布和t分布图形
  • Spring 事务管理核心机制与传播行为应用
  • Keil MDK 编译问题:function “HAL_IncTick“ declared implicitly
  • 牛客java练习题
  • OpenCV 图像调整指南
  • CSS 预处理器:Sass 升级版本 浅学
  • Edge Impulse 训练openMV分类模型(字母+数字)
  • AnimateCC基础教学:制作一个打地鼠简化版
  • 第37讲|AI+农业气象建模:预测极端天气对农业的影响
  • Linux 动、静态库的实现
  • 【代码解读】开源模型 minimind之pretrain
  • Java29:Spring MVC
  • 认识MCP Function Calling AI Agent
  • Redis——内存策略
  • 对于网络资源二级缓存的简单学习
  • 第十章 继承与派生
  • C++ 构造函数调用顺序以及什么是虚析构函数?为什么需要它?
  • Ubuntu下安装和卸载MySQL
  • 简单使用MCP
  • PCA 降维实战:从原理到电信客户流失数据应用
  • 一键升级OpenSSH/OpenSSL修复安全漏洞
  • 【LINUX操作系统】线程基础与分页式存储管理
  • C++初阶-类和对象(中)
  • 【数据分析实战】使用 Matplotlib 绘制散点图
  • Android音视频开发
  • 【网络】通过Samba实现Window挂在Linux服务器路径
  • 【Windows10下PP-OCRv4部署指南‌】
  • 云点数据读写
  • 33-公交车司机管理系统