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

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.lqws.cn/news/200647.html

相关文章:

  • 1990-2023年 地级市人工智能企业数量-社科经管实证数据
  • Linux 文件系统与 I/O 编程核心原理及实践笔记
  • Python Cookbook-7.12 在 SQLite 中储存 BLOB
  • 华为云Flexus+DeepSeek征文|Dify - LLM 云服务单机部署大语言模型攻略指南
  • 又是一年高考季
  • 台式机电脑CPU天梯图2025年6月份更新:CPU选购指南及推荐
  • 《经济学原理》第9版第6章供给、需求和政府政策
  • 性能优化笔记
  • IT学习方法与资料分享
  • Srping Cloud Gateway 跨域配置 CorsWebFilter
  • 使用 Ansible 在 Windows 服务器上安装 SSL 证书系列之二
  • Qt Quick Test模块功能及架构
  • java_网络服务相关_gateway_nacos_feign区别联系
  • DeepSeek09-open-webui使用
  • 第二十八课:深度学习及pytorch简介
  • 现代C++特性(一):基本数据类型扩展
  • 低功耗MQTT物联网架构Java实现揭秘
  • 基于Spring Boot的云音乐平台设计与实现
  • C++类和对象(上)
  • C++ 信息学奥赛总复习题(第一章)
  • 【HarmonyOS 5】运动健康开发实践介绍以及详细案例
  • K8S认证|CKS题库+答案| 5.日志审计
  • Python Cookbook-7.11 在 PostgreSQL 中储存 BLOB
  • Ubuntu下有关UDP网络通信的指令
  • (每日一道算法题)二叉树剪枝
  • 【选配电脑】CPU核显工作机控制预算5000
  • 比较数据迁移后MySQL数据库和ClickHouse数据仓库中的表
  • 深入理解PHP安全漏洞:文件包含与SSRF攻击全解析
  • 安卓基础(aar)
  • Linux安全机制:从SELinux到Intel SGX的堡垒