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

Scade 语言概念 - 方程(equation)

在 Scade 6 程序中自定义算子(Operator)的定义、或数据流定义(data_def)的内容中,包含一种基本的语言结构:方程(equation)(注1)。在本篇中,将叙述 Scade 语言方程的文法形式,以及作用。

注1: 对 Scade 中的 equation, 或 equation set,在部分中文材料中翻译为等式与等式集。这里选择“方程”作为Scade 语言“equation”的翻译是考虑到:a) Scade 推出时面向的用户群为通常使用块状图形式编写自动控制算法的控制工程师,而在该领域,equation 与 equation set 的含义更倾向于方程与方程组。b) 在 ENS《同步反应式系统》课程中,在引出 Lustre 语言时,也是以“联立方程组有唯一解”的例子来引出同步数据流语言,因此 equation 与方程概念接近。c) Lustre 的主要设计者之一 Paul Caspi 的背景来自自动控制领域,其在设计 Lustre 时使用 equation 概念,更有可能指代方程。

方程的文法形式

方程在 Scade 6 文法中的定义如下:

equation ::= simple_equation| assert| emission| control_block return

在 Scade 文法中,对方程概念的含义进行了拓展,含义除了传统意义上的简单方程外,将断言语句、信号发射、控制块结构(状态机、条件块、匹配块)等也归类为方程的生成式(Production)组成。为了专注于方程的原生定义,本篇仅讨论“simple_equation”的生成形式。

"simple_equation"的文法形式如下:

simple_equation ::= lhs = expr

在内容组成方面,由等号左侧的部分(lhs, left hand side)与等号右侧的表达式构成。lhs 可以是 Scade 6 中合法的标识符列表或占位符,其文法形式如下

lhs ::= ( )| lhs_id {{ , lhs_id }}
lhs_id ::= ID| _

而表达式则为语言支持的表达式结构,在这里不作展开,仅列出表达式(expr)的顶层文法生成式

expr ::= id_expr
| atom
| list_expr
| tempo_expr
| arith_expr
| relation_expr
| bool_expr
| array_expr
| struct_expr
| mixed_constructor
| switch_expr
| apply_expr

例子

下面是 Scade 6 语言的片段

function caseOp(ival1, ival2, ival3, ival4: int8) returns (o: int8)o = (case ival1 of | 1: ival2 | 2: ival3 | _: ival4);

其中,o = (case ival1 of | 1: ival2 | 2: ival3 | _: ival4) 为方程。等号左侧的"o"为"lhs",等号右侧的(case ival1 of | 1: ival2 | 2: ival3 | _: ival4)list_expr 列表表达式(因为包含在"()"中)。

方程的使用场景

equation 在 Scade 6 可在如下场景中使用,比如自定义算子的定义体中:

opt_body ::= ;| equation ;| [[ signal_block ]][[ local_block ]]let {{ equation ; }} tel [[ ; ]]

或在数据流定义(dataflow definition)中:

data_def ::= equation ;| scope
http://www.xdnf.cn/news/12613.html

相关文章:

  • DenseNet算法 实现乳腺癌识别
  • 游戏(game)
  • Go 语言 := 运算符详解(短变量声明)
  • Sum of Prod of Mod of Linear_abc402G
  • python的numpy的MKL加速
  • C# 类和继承(扩展方法)
  • 高精度算法--四则运算模板(附例题)
  • Nginx Stream 层连接数限流实战ngx_stream_limit_conn_module
  • SpringBoot十二、SpringBoot系列web篇之过滤器Filte详解
  • 2.3 VS2019 简单使用
  • LLM 笔记:Speculative Decoding 投机采样
  • HTML 面试题错题总结与解析
  • vue3 icon 图标 使用方法
  • VScode打开后一直显示正在重新激活终端 问题的解决方法
  • Modbus RTU与Modbus TCP详解指南
  • 安卓基础(编译.Class)
  • MCP详解及协议的使用(python版本和Node版本)
  • 【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
  • cv2.stereoRectify中R1, R2, P1, P2, Q中每一个分量的物理意义
  • grep、wc 与管道符快速上手指南
  • Linux八股【3】-----系统框架概述
  • SpringBoot项目接口集中测试方法及实现
  • 2.4 vcpkg 使用
  • Vue中渲染函数的使用
  • Promise深入理解
  • 【靶场】yzmcms5.3.0 SSRF漏洞
  • 分享一道力扣
  • 又是一年高考季
  • mariadb5.5.56在centos7.6环境安装
  • python怎么读shape文件?