Scade 语言词法介绍
Scade 6 是一种具备形式化语法与形式化语义的领域特定语言(注1)。自2008年发布(注5)起,在 Scade Suite 产品系列中语言定义方面到目前未产生重要的改变(注2)。在下面的内容中将介绍Scade 语言的词法(注3)。
注1:在巴黎高师课程《同步反应式系统》中,在第一节课"使用Lustre面向嵌入式系统编程"相关的参考材料
TASE 2017中提到了Scade语言语法及语义具备形式化定义的特点。
注2:2024年发布的下一代Scade产品
Scade One中,虽然新语言Swan为Scade 6的拓展,但由于其并不作为Scade Suite产品的内容,因此仍可认为Scade Suite中的语言技术没有变化。
注3: 详细内容可参考scade suite student 2025R1。
注5:
Scade 6发布时间可参考 Scade 在 ERTS 2008 发布的SCADE 6: 面向高安全软件开发的基于模型的解决方案
词法概念
词法规则(lexical rule)是编程语言中的概念,定义如何将源代码的字符序列(字符串)转换为一系列有意义的基本单元(称为 词法记号,Token)的规则。这一过程被称为 词法分析(Lexical Analysis),由词法分析器完成。
词法规则与语法规则的区别
这里需要补充词法概念与语法概念的区别。在一些解析器生成工具,比如"ocamllex + menhir"、"flex + bison"之类的技术组合中,词法规则(.l)与语法规则(.y)由不同的描述构成。需要注意两者概念的区别:
- 词法规则:关注字符如何组成基本单元(Token),属于语言的“单词”层面。
- 语法规则(syntax rule):定义 Token 如何组合成合法的程序结构(如表达式、语句),属于“句子”层面。例如,语法规则会检查
if (x > 0)是否符合条件语句的结构,而词法规则仅确保if、(、x等被正确识别为 Token。
Scade 语言词法规则
Scade 6 的词法可参考 Scade Suite 相关文档的描述(注4)。其中,主要部分包括关键字列表、特殊符号列表、正则表达式描述的词素、注释与pragma的形式定义等。
注4:ANSYS SCADE Suite学生版 安装后,随附文档中的语言参考材料中描述了语言词法。
关键字列表
对关键字列表部分的词法规则,描述的是在Scade 语言中作为特殊关键字的词。比如下面部分Scade关键字的flex 词法定义:
...
flatten { return FLATTEN; }
map { return MAP; }
fold { return FOLD; }
mapi { return MAPI; }
foldi { return FOLDI; }
...
描述了 flatten, map, fold, mapi, foldi 在Scade语言中作为关键字。
特殊符号列表
特殊符号列表部分的词法规则,描述的是Scade语言中作为特殊符号的token。比如下面为部分Scade特殊符号的flex 词法定义:
...
">>" { return DOUBLE_GT; }
"," { return COMMA; }
"{" { return L_BRACE; }
"}" { return R_BRACE; }
...
以上部分描述了>>, ,, {, } 在Scade语言中作为特殊符号token对待,并在词法中命名了相应的标识名字。
正则表达式描述的词素
对正则表达式描述的词素,如下面的flex词法定义片段:
...
INTEGER10 (0|[1-9]{DIGIT10}*)
INTEGER16 0x{DIGIT16}+
...
上面的词法规则描述了Scade中十进制数和十六进制数的表达形式。
注释等内容的词法
对注释等内容的Scade词法描述,如下面的flex词法所示
...
"/*" { BEGIN(COMMENT); }
<COMMENT>{\*"/" { BEGIN(INITIAL); } .|\n
}"--".*
...
描述了/* ... */ 与 -- ... 的形式,在Scade中可表达为注释。
相关文章:
Scade 语言词法介绍
Scade 6 是一种具备形式化语法与形式化语义的领域特定语言(注1)。自2008年发布(注5)起,在 Scade Suite 产品系列中语言定义方面到目前未产生重要的改变(注2)。在下面的内容中将介绍Scade 语言的词法(注3)。 注1&#x…...
如何配置环境变量HADOOP_HOMEM、AVEN_HOME?不配置会怎么样
以下是在不同操作系统中配置 HADOOP_HOME 和 JAVA_HOME 环境变量的方法,以及不配置可能产生的后果: 配置 HADOOP_HOME - Windows系统:下载并解压Hadoop安装包,然后右键“此电脑”,选择“属性”,点击“高级…...
YOLO学习笔记 | 基于YOLOv8的植物病害检测系统
以下是基于YOLOv8的植物病害检测系统完整技术文档,包含原理分析、数学公式推导及代码实现框架。 基于YOLOv8的智能植物病害检测系统研究 摘要 针对传统植物病害检测方法存在的效率低、泛化性差等问题,本研究提出一种基于改进YOLOv8算法的智能检测系统。通过设计轻量化特征提…...
在已有的vue项目中使用vuex
介绍 Vuex 是一个用于 Vue.js 应用程序的状态管理模式 库。它充当应用程序中所有组件的集中存储,其规则确保状态只能以可预测的方式进行更改。 专门在vue中实现集中式状态(数据)管理的一个插件对vue应用中多个组件的共享状态进行集中式的管…...
基于uniapp的鸿蒙APP大数据量性能优化
文章目录 一、问题诊断与性能瓶颈分析1.1 大数据场景下的典型性能问题1.2 性能监测工具使用1.2.1 HBuilderX内置分析器1.2.2 鸿蒙DevEco工具链1.2.3 自制性能埋点 二、数据加载优化方案2.1 分页加载实现(带错误重试机制)2.2 数据流优化策略2.2.1 数据压缩…...
C++ 面向对象关键语法详解:override、虚函数、转发调用和数组引用传参-策略模式
int A(参数...) override { return 某个对象.A(参数...);} 一.目标 本文将用一个简单的“数学运算器”例子,从零解释以下 C 语法特性: virtual 虚函数 override 重写关键字 函数体内部的“转发调用” 数组引用作为函数参数 适合初学者和希望加深…...
山东科技大学深度学习考试回忆
目录 一、填空(五个空,十分) 二、选择题(五个,十分) 三、判断题(五个,五分) 四、论述题(四个,四十分) 五、计算题(二个ÿ…...
sql server 学习计划
目标定位(适用于开发人员、架构师、DBA) 精通 SQL Server 的数据建模、T-SQL 编程、并发控制、性能优化、索引策略 掌握事务、锁机制、统计信息、执行计划 能独立完成复杂系统的数据库设计、调优与可用性设计 具备解决大数据量、高并发、长事务、数据…...
宇树机器狗go2—slam建图(1)点云格式
0.前言 上一篇番外文章教大家如何在宇树机器狗go2的gazebo仿真环境中实现简单的导航运动,本期文章会教大家如何让宇树的机器狗go2在仿真环境中进行slam建图时经常会遇到的一些点云格式,在后续的slam建图和slam算法解析的时候会经常与这些点云信息打交道…...
致远OA——自定义开发rest接口
文章目录 :apple: 业务流程 🍎 业务流程 代码案例: https://pan.quark.cn/s/57fa808c823f 官方文档: https://open.seeyoncloud.com/seeyonapi/781/https://open.seeyoncloud.com/v5devCTP/39/783.html 登录系统 —— 后台管理 —— 切换系…...
No package docker-ce available问题的解决
安装docker时提示 rootk8s-node3 ~]# yum install -y docker-ce docker-ce-cli containerd.io Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com No packag…...
群晖威联通飞牛等nas如何把宿主机硬盘挂接到可道云docker容器中
可道云系统是用户常用的一款面向个人用户的轻量级私有云存储工具,以高效管理和安全存储为核心,打造便捷的数字化办公体验。但是用户希望把原有其他磁盘中文件挂接到这个新系统中有很大的难度,主要是对linux文件系统理解有很大的误区,认为目录结构是固定的…...
使用docker该怎么做:从公有仓库拉取镜像并上传到私有仓库
在容器化部署中,将公有镜像仓库(如Docker Hub)的镜像迁移到私有仓库(如Harbor、Nexus)是常见需求。 一、为什么需要将镜像从公有仓库传到私有仓库? 网络连通性:公有仓库依赖公网访问ÿ…...
软件开发指南——GUI 开发方案推荐
1. LVGL (Light and Versatile Graphics Library) 适用场景:嵌入式设备、资源受限环境 优势: 专为嵌入式设计的开源 GUI 库,内存占用极小(最低仅需 64KB RAM)支持触摸屏、硬件加速(如 STM32 的 LTDC&…...
使用 Azure AKS 保护 Kubernetes 部署的综合指南
企业不断寻求增强其软件开发和部署流程的方法。DevOps 一直是这一转型的基石,弥合了开发与运营之间的差距。然而,随着安全威胁日益复杂,将安全性集成到 DevOps 流水线(通常称为 DevSecOps)已变得势在必行。本指南深入探讨了如何使用 Azure Kubernetes 服务 (AKS) 来利用 D…...
C#: 用Libreoffice实现Word文件转PDF
现实场景中要实现Word格式转PDF格式还是比较常见的。 如果要用开源的组件,只有用Libreoffice了。 一、下载安装Libreoffice 先进入如下链接,找到最新版本和匹配的操作系统来安装。 官网试过,下载是能下载,但安装了用不了&…...
Node.js 创建 HTTP 服务端
Node.js 创建 HTTP 服务端的用法总结,内容涵盖了 核心模块、基本用法、Express 简化用法、常见场景、错误处理、以及实用小贴士。 ✅ 一、Node.js 创建 HTTP 服务的方式 Node.js 使用内置的 http 模块即可快速创建一个 Web 服务,无需额外安装依赖。 ✅ …...
Uniapp:列表选择提示框
目录 一、出现场景二、效果展示三、具体使用 一、出现场景 在项目的开发过程中,有这样一种场景,就是点击按钮走后续的逻辑之前还需要选择前提条件,就一个条件的情况下如果使用弹出框就显示比较多余,列表选择提示框刚好能够满足我…...
【python】django sqlite版本过低怎么办
方法一:下载最新版本 复制上面的内容的链接 在服务器上进行操作 wget https://sqlite.org/2025/sqlite-autoconf-3490100.tar.gz tar -zxvf sqlite-autoconf-3490100.tar.gz cd sqlite-autoconf-3490100 ./configure --prefix/usr/local make && make in…...
山东大学软件学院创新项目实训开发日志(18)之对话自动生成标题设为用户第一次对话发的文字
本次功能的实现主要集中在后端,前端代码不用改变: 前端界面效果展示:...
【机器学习】PCA-奇异值分解-上采样与下采样-傅里叶变换
1. PCA 主成分分析 主成分分析(PCA)是一种常用的数据降维方法。 它通过找到数据中方差最大的方向(主成分),将原始高维数据映射到较低维空间,同时尽可能保留原始信息。 数学实现上,通常通过协方…...
[图论]生成树 引言
生成树 引言 生成树:一个连通图的生成树是该图的一个极小连通子图。生成树中含有图中全部(设 V V V个)顶点及构成一棵树的 V − 1 V-1 V−1条边,且生成树中不应有环。最小生成树(MST):图的所有生成树中,边权之和最小的生成树。显…...
前端与Java后端交互出现跨域问题的14种解决方案
跨域问题是前端与后端分离开发中的常见挑战,以下是14种完整的解决方案: 1 前端解决方案( 开发环境代理) 1.1 Webpack开发服务器代理 // vue.config.js 或 webpack.config.js module.exports {devServer: {proxy: {/api: {target: http://localhost:8…...
【day8】调用AI接口,生成自动化测试用例
1、项目结构建议 project/ ├── api_docs/ # 存放接口文档 │ └── XX系统.swagger.json ├── ai_generator/ # AI测试用例生成模块 │ └── test_case_generator.py ├── tests/ # 生成的测试用例 │ └── test_user_api.py ├── conftest.py # pytest配置 ├─…...
C#中同步任务和异步任务
同步任务和异步任务在编程中各有其独特的优缺点 同步任务 优点 逻辑简单清晰:同步任务的执行流程与代码编写顺序一致,依次执行各个操作,开发者无需考虑复杂的异步回调、任务状态管理等问题,代码的逻辑和执行顺序易于理解和调试…...
多人3D游戏完整实现方案
以下是一份完整的代码实现方案,涵盖架构设计、核心模块实现和部署流程。我们以 多人3D游戏 为例,结合之前讨论的Nano服务端框架和Unity客户端: 技术栈 模块技术选型服务端Golang + Nano框架 + MongoDB客户端Unity 2022 + C# + Mirror Networking通信协议Protobuf + WebSock…...
【sylar-webserver】8 HOOK模块
文章目录 知识点HOOK实现方式非侵入式hook侵入式hook ⭐⭐⭐ 覆盖系统调用接口获取被全局符号介入机制覆盖的系统调用接口 具体实现FdCtx 和 FdManagerconnect hookdo_io模板 在写之前模块的时候,我一直在困惑 协程是如何高效工作的,毕竟协程阻塞线程也就…...
【Tauri2】026——Tauri+Webassembly
前言 不多废话 直言的说,笔者看到这篇文章大佬的文章 【04】Tauri 入门篇 - 集成 WebAssembly - 知乎https://zhuanlan.zhihu.com/p/533025312尝试集成一下WebAssembly,直接开始 正文 准备工作 新建一个项目 安装 vite的rsw插件和rsw pnpm instal…...
Notepad++中将文档格式从Windows(CR LF)转换为Unix(LF)
在Windows中用记事本写了一个.sh的Linux运行脚本,是无法直接在Linux中执行,需要首先把文本编码格式转换为Unix的,特别是换行符这些,转换步骤如下: 1、打开文档 在Notepad中打开需要转换的文件。 2、进入文档格式转换…...
Linux常见工具如yum、vim、gcc、gdb的基本使用,以及编译过程和动静态链接的区别
目录 一、工具的本质 二、一些常用的工具 1.yum 2.vim 1)vim的三种基本模式: 2)vim的基本操作 ①命令模式下的基本操作: ②插入模式: ③底行模式: 3)vim的配置:让他变得更好用 3.gcc…...
