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

Eclipse Xtext 实现PLC ST 语言到C的转换

   Eclipse Xtext 是开发领域专用语言(DSL)的工具。例如数据库的SQL 语言,PLC 的ST 语言都是一种领域专用语言。在开放自动化领域,提倡基于模型的设计方法。DSL 是描述模型的强有力工具。

   在开发PLC 程序IDE时,开发ST编译器是一项重要的任务,使用的方法大致有两种:

  •   使用 Bison 和Flex
  •    使用Eclipse Xtext

  开源PLC项目Beremiz中,使用的就是Bison/Flex.而IEC61499 开源项目4diac 中使用的是Xtext。关于Xtext 实现ST 到C语言转换,我在两年前做过,有一些读者觉得不够详细,最近又将Eclipse Xtext 实现ST 语言转化为C++ 程序的过程做了一遍。供读者参考。其中的语法描述和代码生成是从4diacIDE 移植过来的。

整个过程在Window 下完成。

下载Eclipse Install 

官网地址:

Eclipse Downloads | The Eclipse Foundation

运行Eclipse Install

        以前介绍Xtext 是Eclipse Modeling Tool 下加Xtext 插件的方式安装Xtext IDE ,现在不需要了,直接选择安装DSL Developers 就可以了。 

新建一个xtext项目

新建了xtext 项目之后,回在Eclipse workspace 下建立了4 个项目。

 xtext 项目开发的主要工作

描述你打算开发的DSL 语言的语法描述文件。这是一个xtext 的文件

编写代码生成程序,这是一个xtend 文件

运行mwe2

运行DSL 编辑器

这相当于自动生成了一个DSL 的Eclipse IDE。你可以在里面编辑一个xxx.ST 文档,能够高亮关键字等等。 

独立的命令行编译程序

        我们已经知道,Eclipse Xtext 项目会建立一个针对DSL 的Eclipse IDE。在这个DSL IDE下能够编辑DSL 。但是,有时我们只需要一个独立的命令行编译器(类似于gcc)。Eclipse Xtext 项目能够导出命令行编辑程序。

     鼠标指向Main.Java文件 击右键 Run As | Java Application 这时在控制台下会出现“Aborting: no path to EMF resource provided!" 不要担心,因为你没有带任何命令参数。

 文件菜单中选择 Export... | Java | Runnable JAR File,然后点击 Next.

  按如下设参数
  

运行

PS E:\yao2023\eclipse-workspace> java  -jar STCompiler.jar ./GenericFB.ST
Code generation finished.
PS E:\yao2023\eclipse-workspace>

 ST 代码

VARX :INT;Y:REAL;Z:BOOL;A:ARRAY[1..12] OF INT;i:INT;
END_VAR;
IF Z THENX:=0;X:=X*60;Y:=sin(3.14156);
ELSIF X>0 THEN X:=10;
ELSEX:=10;		
END_IF;Z:=TRUE;i:=0;
WHILE i<14 DOA[i]:=i;i:=i+1;
END_WHILE;X:=3;
FOR i:=0 TO 12 DOX:=X+i;
END_FOR;
CASE i OF
0:i:=1;
1:i:=2;
END_CASE;
RETURN;

翻译的C语言

int X;
double Y;
bool Z;
int A[11];
int i;
if(Z) {X = 0;X = MUL(X, 60);Y = sin(3.14156);
}
else if((X > 0)) {X = 10;
}
else {X = 10;
};
Z = true;
i = 0;
while((i < 14)) {A[i] = i;i = ADD(i, 1);
};
X = 3;
for(i = 0;i <= 12;i = i +1){X = ADD(X, i);
};
switch (i) {case 0:i = 1;break;case 1:i = 2;break;
}
return;

过程记录难免不全,有问题就问吧!

结束语

        最近再次对DSL 感兴趣的原因是本人对自动化行业的信息模型文本描述十分关注。觉得使用DSL 语言描述模型更加有效。

相关文章:

Eclipse Xtext 实现PLC ST 语言到C的转换

Eclipse Xtext 是开发领域专用语言&#xff08;DSL&#xff09;的工具。例如数据库的SQL 语言&#xff0c;PLC 的ST 语言都是一种领域专用语言。在开放自动化领域&#xff0c;提倡基于模型的设计方法。DSL 是描述模型的强有力工具。 在开发PLC 程序IDE时&#xff0c;开发ST编译…...

Django中ORM框架的各个操作

我们会好奇&#xff0c;python这么简洁的语言&#xff0c;数据查询是如何做的呢&#xff1f;我将进一步详细和深入地介绍Django中ORM框架的各个方面&#xff0c;包括MySQL的增删改查和复杂查询。让我们分步骤进行。 ORM框架介绍 Django的ORM框架是一个用于与数据库进行交互的工…...

leetcode 583. 两个字符串的删除操作、72. 编辑距离

两个字符串的删除操作 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 "sea…...

flutter 创建插件

资料&#xff1a; flutter与原生通信的方式简介 - 简书 完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎 https://www.cnblogs.com/webabcd/p/flutter_lib_plugin_plugin_ios.html 步骤1、创建插件 我创建的插件名字是konnect_im_sdk 选择的语言是 java和swi…...

Framework之旅 -- 后台Recent基础扫盲篇

如果想了解一个事物&#xff0c;是需要展开然后在优化记忆结构的&#xff0c;优化记忆在于后期的个人领悟能力&#xff0c;展开流水账如下&#xff0c;仅为个人记忆笔记&#xff0c;梳理结构有待优化。 TaskDescription&#xff0c;直译看就是task相关的说明了。 看看包含什么…...

全光谱护眼灯有哪些?2023全光谱护眼台灯推荐

随着电子设备的不断普及&#xff0c;手机、平板电脑、显示器、电视机等几乎是家家户户的必备品&#xff0c;也正因为眼睛有那么多时间、那么多机会去盯着屏幕&#xff0c;所以如今近视低龄化现象也越来越严重了。随着科技的不断发展&#xff0c;台灯的发展也越来越多样化&#…...

【JavaEE初阶】 定时器详解与实现

文章目录 &#x1f334;定时器是什么&#x1f38b;Java标准库中的定时器&#x1f332;模拟实现定时器&#x1f6a9;定时器的构成&#x1f4cc;第一步&#xff1a;MyStack类的建立&#x1f4cc;第二步&#xff1a;创建MyTimer类&#x1f4cc;第三步&#xff1a;解决相关问题 &am…...

基于YOLOv8模型和WiderPerson数据集的行人目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOv8模型和WiderPerson数据集的行人目标检测系统可用于日常生活中检测与定位行人目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标…...

COSCon'23 开源社文创丨 给开源人一点“color see see”

成都城市限定 “小O在成都”行李箱贴纸 成都限定行李箱贴纸把小O和特色元素相融合 当小O遇到成都 在云端漫步的蓝色小章鱼 掉落到这座热情似火的城市&#xff0c; 结识了大熊猫朋友 学会了四川麻将 吃到了红油串串... 快带着小O来一场自由的旅游吧&#xff01; “你也要尝尝竹子…...

C++前缀和算法的应用:从仓库到码头运输箱子原理、源码、测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 双指针 单调双向队列 题目 你有一辆货运卡车&#xff0c;你需要用这一辆车把一些箱子从仓库运送到码头。这辆卡车每次运输有 箱子数目的限制 和 总重量的限制 。 给你…...

【面试HOT100】链表树

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于LeetCodeHot100进行的&#xff0c;每个知识点的修正和深入主要参考…...

了解 Elasticsearch 自动生成的文档 _id:重复是一个问题吗?

Elasticsearch 中自动生成的文档 ID 当你在未指定 ID 的情况下对文档建立索引时&#xff0c;Elasticsearch 会自动为该文档生成唯一的 ID。 该 ID 是 Base64 编码的 UUID&#xff0c;由多个部分组成&#xff0c;每个部分都有特定的用途。 ID 生成过程针对索引速度和存储效率进…...

量子信息处理器可能能够提供高度压缩的生成对抗学习任务的版本

量子信息处理在生成对抗学习任务中的应用可能性&#xff0c;以及量子信息处理器在表示高维向量和执行线性代数运算上的优势。 举个例子 假设底层数据由M个在N维实数或复数空间中的归一化向量~vj组成&#xff0c;使得数据的&#xff08;归一化&#xff09;协方差矩阵为C (1/M…...

linux-守护进程daemon

linux-守护进程daemon 代码实现 main.c运行结果 代码实现 main.c //pName&#xff1a;程序名 //facility&#xff1a; 守护进程&#xff0c;输出日志类型 302页 #include<signal.h> #include<syslog.h> #include<fcntl.h> static int daemon_proc 0; #defin…...

Kafka Tool(Kafka 可视化工具)安装及使用教程

Kafka Tool&#xff08;Kafka 可视化工具&#xff09;安装及使用教程 Kafka Tool 工具下载 下载地址 http://www.kafkatool.com/download.html 下载界面 不同版本的Kafka对应不同版本的工具&#xff0c;个人使用的是2.11&#xff0c;所以下载的是最新的2.0.8版本&#xff…...

【大揭秘】美团面试题:ConcurrentHashMap和Hashtable有什么区别?一文解析!

正文 亲爱的小伙伴们&#xff0c;大家好&#xff01;我是小米&#xff0c;一个热爱技术分享的程序员&#xff0c;今天我为大家带来了一篇有关美团面试题的热门话题&#xff1a;ConcurrentHashMap 和 Hashtable 有什么区别。这个问题在Java面试中常常被拿来考察对多线程编程的理…...

爬虫基础 JS逆向

爬虫核心 1. HTTP协议与WEB开发 1. 什么是请求头请求体&#xff0c;响应头响应体 2. URL地址包括什么 3. get请求和post请求到底是什么 4. Content-Type是什么 &#xff08;1&#xff09;简介 HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;…...

nextTick实现原理

答题思路&#xff1a; 此题实际考查vue异步更新策略说出vue是怎么通过异步、批量的方式更新以提高性能的最后把源码中实现说一下 回答范例&#xff1a; vue有个批量、异步更新策略&#xff0c;数据变化时&#xff0c;vue开启一个队列&#xff0c;并缓冲在同一事件循环中发生的…...

CentOS 7中安装ZooKeeper

文章目录 下载解压安装环境变量配置文件启动设置开机自启动开放端口 CentOS 7.6 ZooKeeper 3.5.7 本文介绍了如何在CentOS 7系统中安装单机版的ZooKeeper。 下载 点击官网下载 解压安装 # 解压 tar -xzvf apache-zookeeper-3.5.7-bin.tar.gz sudo mv apache-zookeeper-3.5.…...

推荐《幽游白书》

《幽游白书》是日本漫画家富坚义博于1990年12月3日—1994年7月25日于集英社旗下杂志《周刊少年Jump》上连载的少年漫画作品&#xff0c;全175话&#xff08;含外传一话&#xff09;。现时发行的单行本共计19册&#xff0c;电子版由漫番漫画、哔哩哔哩漫画发布 [1-2] 。 本作最…...

Transformer实战(28)——使用 LoRA 高效微调 FLAN-T5

Transformer实战(28)——使用 LoRA 高效微调 FLAN-T5 0. 前言 1. LoRA 2. SNLI 数据集 3. 使用 LoRA 高效微调 FLAN-T5 3.1 指令格式 3.2 模型选择 4. 使用 QLoRA 进行微调 小结 系列链接 0. 前言 我们已经学习了参数高效微调 (Parameter Efficient Fine-Tuning, PEFT) 的基…...

嵌入式设备中的高效枚举映射

在嵌入式系统开发中,性能优化是一个持续的话题。对于那些需要高效访问特定数据的场景,使用传统的std::map或std::unordered_map可能不是最佳选择,因为它们在性能受限的环境中可能会引入不必要的开销。本文将介绍如何利用C++的std::array和枚举类型创建一个高效的静态映射,并…...

跳出“暴力美学”:一个模块化、类脑的大模型架构构想(大模型的思考:三)

跳出“暴力美学”之后&#xff1a;一次模块化大模型构想的自我纠偏与落地思考从“同步振荡”到“语法骨架”&#xff0c;从“词不达意”到失语症证据——一场关于解耦智能的思想实验如何走向严谨写在前面之前&#xff0c;我发表了一篇《跳出“暴力美学”&#xff1a;一个模块化…...

颠覆传统巡检模式:AI技术如何重塑安全生产新格局

作为"我ai去巡检"小程序的技术研发团队&#xff0c;我们亲眼见证了人工智能如何从实验室概念转变为守护安全生产的核心力量。今天&#xff0c;我们将深入剖析AI技术在安全生产领域的前沿应用&#xff0c;揭秘我们如何攻克技术难题&#xff0c;打造这款重新定义行业标…...

JDK20安装后,除了‘Hello World’还能怎么玩?用VSCode快速搭建你的第一个Java项目

JDK20安装后&#xff0c;除了‘Hello World’还能怎么玩&#xff1f;用VSCode快速搭建你的第一个Java项目 当你成功安装JDK20并验证了环境变量配置后&#xff0c;打印"Hello World"可能已经无法满足你的探索欲望。作为现代Java开发者&#xff0c;我们更渴望立即投入…...

从24V到3.3V:实战解析DCDC、LDO与电压基准的选型与应用电路

1. 电源转换电路的基础认知 第一次接触电源设计时&#xff0c;我被各种电压转换搞得晕头转向。24V、12V、5V、3.3V...这些电压就像电路板上的"方言"&#xff0c;每个模块都在用不同的"语言"交流。后来才明白&#xff0c;电源转换电路就是这些"方言&qu…...

告别信号模糊:手把手教你理解PCIe 3.0的动态均衡(含FIR滤波器与CTLE/DFE详解)

告别信号模糊&#xff1a;手把手教你理解PCIe 3.0的动态均衡&#xff08;含FIR滤波器与CTLE/DFE详解&#xff09; 当你第一次在示波器上看到PCIe 3.0信号的眼图时&#xff0c;可能会被那些模糊的"眼睛"吓到——本该清晰的交叉点变成了毛茸茸的线条&#xff0c;高低电…...

从Arduino到PCB:手把手复现TCD132D线性CCD扫描相机(附开源代码与避坑指南)

从Arduino到PCB&#xff1a;手把手复现TCD132D线性CCD扫描相机&#xff08;附开源代码与避坑指南&#xff09; 当你想用线性CCD捕捉高速运动物体的瞬间&#xff0c;却发现市面上的扫描相机要么价格昂贵&#xff0c;要么性能不足——这正是我三年前遇到的困境。TCD132D这颗拥有1…...

XQuery FLWOR 与 HTML 的结合:深度解析与实践指南

XQuery FLWOR 与 HTML 的结合:深度解析与实践指南 引言 XQuery 是一种用于处理 XML 和 XHTML 数据的查询语言,而 HTML 作为网页内容的载体,两者在数据检索和处理方面有着广泛的应用。本文将深入探讨 XQuery 的 FLWOR 模式与 HTML 的结合,分析其优势、应用场景及实践方法。…...

从B站视频保存难题到Java下载神器:BiliDownload的完整解决方案

从B站视频保存难题到Java下载神器&#xff1a;BiliDownload的完整解决方案 【免费下载链接】BiliDownload B站视频下载工具 项目地址: https://gitcode.com/gh_mirrors/bil/BiliDownload 作为一名B站内容创作者&#xff0c;你是否曾遇到过这样的困境&#xff1a;精心收藏…...