属性
一些申明可能会给可见和可用的属性目标,
visiblity ::=private|public#可视化
external ::=imported;#外部
interface_status ::=[[visiblity]][[external]]#接口状态

一个包内的类型、组、常量、用户操作被严格隐藏在。
可视化规则:
公共的——默认状态;申明的变量可以在任何地方使用
私有的——被严格限制的;申明的变量只能在包的内部和它的子包内使用。私有变量出现在一个打开的包中不能与当前申明的包相互作用:没有名称冲突可能发生
SCADE不是一个通用的语言。一个SCADE程序倾向于嵌入到一个通用的程序中,通用程序是免费的,特别的,简单的输入和显示输出的SCADE程序。
一个申明被申明为imported类型通过使用关键词前缀imported。

例子
1.私有的可视化状态:类型 t不能识别在P1包外。这个程序有个错误:

package P1type private t=int64;#自定义一个int64类型的量:tconst c:t=0;#给常量c赋0值
end;
open P1;
const d:t=c+1;#在包P1外,t类型不可识别


2.imported类型申明

package ForeignArithmeticstype imported  ForeignCplx;function imported plusCplx(x,y:ForeignCplx) return (z:ForeignCplx);function teiceCplx(x:ForeignCplx) return (y:ForeignCplx);y=pulsCplx(x,x);end

类型申明
类型申明通常被用户用来创建新的用户数据类型;

type_block ::type{{type_decl;}}
type_decl ::=interface_status ID [[=type_def]] [[ is numeric_kind]]
type_def ::=type_expr|enum{ID{{,ID}}
numeric_kind ::=numeric|float|integer|signed|unsigned

一个类型快开始的关键词TYPE,几个类型被申明只能使用type一次。

结构类型:

type t={lbl1:int32,lbl2:bool,lbl3:{lbl4:int32,lbl5:float32}};
const c:t={lbl1:1,lbl2:true,lbl3:{lbl4:2,lbl5:0.5}};
const d:int32=c.lbl1;

组申明
建立组对象的方法:
group_block ::=group{{group_decl;}}
group_deck ::=[[visibility]]ID=group_expr;
 
一个组块开始的关键词:group。几个组申明只能有一个关键词:group。一个组可以被用作一个类型在组中,不能被用作衣
常量类型、传感器、定义申明。
只能通过用户定义的操作符来进行操作。多态类型的操作的限制范围如下:

时态:pre,->,fby,when,merge.
控制:if(不为条件论证)case (不为条件论证)

组表达式
group_expr=(type_expr{{,type_expr}})
一个组表达式有非空的类型表达式列表组成。任何类型都能被用作组表达式。一个有效的组识别码可以被用作组的表达式。
例子:
1.组申明

group G1=(int32,bool);G2=(bool,G1);

2.组不能被定义成一个新类型和一个传感器。下面组的定义是不正确的:

group
G=...
type
T1=G^n;
sensor
S:G;

3.一个变量的识别码可以用带有G的申明:

group G=(int32,int16,bool);
node ex(e:G;...) returns (s:int32;...)
...
tel;

4.组通常是平的:

group
G0=(int32,bool);
G1=(int32,G0);
function f1(x:int32;y:int32;z:bool) returns(r:G1)
r=(x,y,z);
function f2(v:G1) returns(a:int32;b:int32;c:bool)
a,b,c=f1(v);

5.组通常被用作管理多个输出操作:

function f(a,b:int32;c:bool) returns(x,y:int32)
function g(a,b:int32) returns(x:int32)

6.列表中的表达式包含基于不同时钟的流:

function N(x:int32;clock h:bool) returns(y:int32 when h;z:bool)
let
y,z=(x when h,true);
tel;

而一组类型的对象不能。下面的例子有个问题:

group G=(int32,bool);
function N(x:int32;clock h:bool) returns (y:G)#一组对象不行
let
y=(x when h,true);
tel;

全局流
全局流是可在当前上下文的任何用户操作的一个流程。这个流可以使常量(关键词:const)或者变量(关键字:sensor)。

常量
const_block ::=const{{const_decl;}}
const_decl ::=interface_status ID:type_expr [[=expr]]
每个常量申明必须用分号结束。
一个imported类型的常量申明必须给以类型:type,而不能有定义部分。一个非imported类型的常量申明必须有定义的类型和定义部分。
例子都是错误:
1.一个imported的常量不能有定义部分:
type imported t;
const c:t=2.0;
2.一个imported类型的常量不能被当做静态表达式,用type申明或者用一个数字的索引:
const imported C:int32;
type T=int32^C;
3.无效静态表达式:

const c:int32 = if true then 0 else 1;
const d:int32 =0->1;const e:bool =true;
const f:int32= 1 when e;

传感器

sensor_block ::=sensor{{sensor_decl;}}
sensor_decl ::ID{{,ID}}:type_expr;

传感器可以是任何类型(除了type变量)但不能是组类型。传感器在用户操作中被当做时钟。
传感器时时刻刻被应用在每个节点。为了保证SCADE的语义,在传感器流中的值一定要保持不变在整个时钟周期内。
例子:
1.传感器申明:

sensor temp:float32;
node gradient() returns(diff:float32)
let
diff =0.0->temp-pre temp;
tell;

2.传感器重载:这个程序不是很好的类型

sensor s:int16;
function Main(s:bool) returns (b:int16) b=s;

Scade——学习笔记(2)相关推荐

  1. Scade——学习笔记

    词汇元素也叫词位被用于描述语言结构的句法 正则表达式符号: 符号                         含义 ID=re 在正则表达式中ID被定义为re | 替代 re? 出现re的次数为0 ...

  2. Scade——学习笔记(4)

    条件模块: 在当前循环中,当控制流依赖一个可计算条件时,条件模块是一个方便的表达方法. clock_block ::=active [[id]]((if_block|match_block))if_b ...

  3. Scade——学习笔记(5)

    表达式:  表达式是Cade语言的基本块.表达式允许流的联合仅仅通过申明在一个周期内应该做什么: expr ::= id_expr | atom | list_expr | tempo_expr | ...

  4. Scade——学习笔记(3)

    用户定义操作 用户定义是面向过程语言提供最基本的句法.它们允许重用之前在Model中定义的操作. 用户定义操作: user_op_decl ::=op_kind interface_status ID ...

  5. 系统工程(SE)学习笔记(番外篇之一)——Capella使用体会兼谈SE工具

    系统工程(SE)学习笔记(番外篇之一)--Capella使用体会兼谈SE工具 零.Capella简介 壹. Capella的优势 贰.Capella的缺点 叁. 生态环境 肆. 总结 说到SE,就不能 ...

  6. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  7. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  8. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  9. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

最新文章

  1. 飞机为什么能飞起来?直到今天,科学家仍然没有答案
  2. python 新建一列_python – 如何处理列名称和创建新列
  3. python程序开发模块化_python-17-Python文件两种用途、模块化程序开发
  4. 【C++】静态成员 static
  5. 利用jsonp、iframe和location.hash解决跨域问题
  6. jQuery----各版本
  7. “拼多多优惠券”测试的套路,今天让你秒懂~
  8. Spring MVC(十六)--Spring MVC国际化实例
  9. ZOJ Problem Set - 1292 Integer Inquiry
  10. html打开显示不全,打开浏览器网页显示不全 网页显示不正常解决方法
  11. Android中TextToSpeech的使用
  12. Unity官方文档(英文)
  13. 国内最知名的PHP开源网站管理系统,国内最强十款开源网站管理系统
  14. android测行走距离,如何在Android中行走时计算距离?
  15. namecheap 从域名绑定到SSL配置
  16. 费马小定理和欧拉定理作业
  17. 饥荒联机云服务器_饥荒steam联机版专用服务器搭建
  18. 自动化测试遇到的难点_自动化测试不成功的原因和实施过程中存在的问题
  19. 《2021/07/24》1 -- linux -- 网络名称空间和网桥的基本操作
  20. 同时校验手机号和座机号

热门文章

  1. 安装GitHub上一些库的注意事项
  2. 【华为OD机试真题】完美走位(python)100%通过率 超详细代码注释 代码解读
  3. docker国内镜像仓库地址
  4. 总结帖:我也总结这两年多的工作生活
  5. 【2020.06.01~2020.06.07】知识分享
  6. thinkpad卡在logo界面_当大地win7旗舰版电脑开机卡在Thinkpad LOGO画面无法进入桌面怎么办...
  7. POJ 1417 True Liars(路径压缩并查集+DP背包问题)
  8. python中列表list和元组tuple
  9. fputc()和fgetc()应用
  10. linux inittab 时间,Linux inittab配置