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 代码

VAR
	X :INT;
	Y:REAL;
	Z:BOOL;
	A:ARRAY[1..12] OF INT;
	i:INT;
END_VAR;
IF Z THEN
	X:=0;
	X:=X*60;
	Y:=sin(3.14156);
ELSIF X>0 THEN 
	X:=10;
ELSE
   X:=10;		
END_IF;
	Z:=TRUE;
	i:=0;
WHILE i<14 DO
	A[i]:=i;
	i:=i+1;
END_WHILE;
	X:=3;
FOR i:=0 TO 12 DO
    X:=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 语言描述模型更加有效。

姚家湾
关注 关注
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
xtext:Eclipse Xtext:trade_mark:是一种语言开发框架
05-13
Eclipse Xtext是用于开发编程语言和的框架。 它涵盖了完整语言基础结构的所有方面,从解析器,链接器,编译器或解释器,到用于Eclipse和基于Web的IDE的功能完善的顶级IDE集成。 此外,可以将使用Xtext开发的集成到...
用flex和bison来创建自己的语言
月夜渔樵
02-20 1073
暂无
初探PLCST 语言转换成C++ 的方法
姚家湾博客
04-10 6346
工业控制软件绕不开STStructureText语言,它是IEC61131-3 标准中唯一的一个高级语言。根据IEC61499的定义,功能块的内部算法可以使用若干语言来描述,虽然可以是C,或者java 这样的通用高级语言,但是为了符合OT 工程的使用习惯,几个主要的IEC61499 开发工具也都以STL语言作为功能块内部算法的语言 。 本文讨论如何将类似PASCAL 的ST如何转换成为C++ 代码,并且介绍了Xtext和DSL的技术。
探索未来的编程语言框架——Eclipse Xtext
最新发布
gitblog_00035的博客
08-06 863
探索未来的编程语言框架——Eclipse Xtext xtextEclipse Xtext: 是一个开源的DSL框架,用于构建自定义的文本编辑器和语言服务器。适合开发者、语言设计师和工具开发者。特点包括提供简单易用的DSL定义语言、支持多种编程语言和编辑器、支持多种语言服务器和扩展、易于集成到现有的开发工具和流程中以及提供丰富的文档和社区支持。项目地址:https://gitcode.com/g...
ST语言通常使用什么编译器
weixin_35755434的博客
01-04 976
ST语言通常使用STMicroelectronics公司提供的ST Visual Develop(STVD)或者 Cosmic CXSTM Compiler来进行编译。这些编译器是专门为STMicroelectronics公司的微控制器设计的,能够将ST语言编写的程序编译成机器代码,并生成Hex文件供微控制器使用。 STMicroelectronics公司是一家世界知名的半导体公司,在微控制器领域...
Windows 配置基于rust的llvm st编译器环境
hml111666的博客
09-24 999
6、可直接打开vscode打开rusty源码 ,进入到工程目录,执行cargo build(test)即可在target下生成debug文件夹等,debug里面包含rustyc.exe。2、下载vs2017、 2019 ,都选择c++桌面开发(扩展开发 linux开发)4、下载llvm window 特殊构建(构建rusty 需要)1、搭建rust环境,下载、运行rustup-init.exe。5、设置环境变量:path添加压缩包解压后的bin文件。3、下载vscode(下载对应插件 编辑rusty)
西门子的ST语言有开源的编译器
weixin_35749440的博客
01-04 337
西门子的 ST 语言并没有开源的编译器ST 语言是西门子公司专门为其 PLC(可编程控制器)设计的编程语言。西门子公司的 PLC 产品是商业产品,ST 语言也是西门子公司的商业秘密,所以 ST 语言编译器并不是开源的。 ...
你能为西门子的ST语言设计一个编译器
weixin_35755562的博客
01-04 460
是的,我可以为西门子的ST语言设计一个编译器ST语言是一种专门用于西门子控制器的编程语言。它的语法与众多编程语言类似,因此可以使用通用的编译器设计方法来开发编译器编译器是一种软件,它的作用是将源代码转换为可执行的机器代码。编译器通常包括三个主要部分:词法分析器,语法分析器和代码生成器。 词法分析器(也称为词法分析器)负责将源代码分割为许多单独的单词(称为词法单元或令牌)。这些单词可以是关键字...
xtext-fsml:FSM 语言的 XText 实现
06-08
它利用 Eclipse Xtext 工具集,为开发者提供了一种高效且灵活的方式来定义和实现自定义的领域特定语言(DSL)。Xtext 提供了完整的语法定义、解析、代码生成和编辑器支持,使得创建FSM语言变得轻而易举。 在SLE...
eclipse Xtext javadoc
03-22
Eclipse Xtext是一款强大的语言工具包,用于构建领域特定的语言(DSL)和代码生成器。它基于Eclipse平台,提供了一套完整的框架,允许开发者创建自己的语法定义,并自动生成编辑器、编译器以及相关的代码生成逻辑。...
使用Xtext和Xtend实现域特定语言(第二版)-中文-第四章.pdf
12-19
在本章中,我们将深入探讨如何使用Xtext和Xtend来实现域特定语言(DSL)的验证功能。验证在DSL开发中起着至关重要的作用,因为它允许在用户编辑DSL时实时检查并报告错误和警告,确保代码符合既定的语法规则和约束。 ...
xtext-standalone-maven-build:Xtext独立的maven构建,不带Eclipse
02-04
这为开发者提供了一种灵活性,可以在不依赖Eclipse集成开发环境的情况下,管理和构建基于Xtext语言项目。 首先,Maven是Java项目管理的重要工具,它负责管理项目的依赖、构建过程以及打包发布。在Xtext的场景下,...
Xtext试用: 快速实现简单领域专用语言(DSL)
中文编程
01-09 3768
环境搭建 使用的Eclipse版本: Oxygen.1a Release (4.7.1a) Build id: 20171005-1200, 通过添加Xtext - Download上列出的Releases update site安装xtext IDE和xtext SDK. 之后打开Eclipse, 打开任何文件就报错: An error has occurred. See error log f...
4diacIDE IEC61499 开发环境编译
姚家湾博客
04-15 4462
4diac是IEC61499 分布式控制系统的开源项目,主要分为开发环境IDE和运行时Forte两部分组成。IDE 是基于Eclipse IDE ,使用java 开发的程序,而Forte是使用C++ 开发的程序。 本文介绍如何编译4diac IDE
使用Xtext/Xtend 实现域专用语言DSL(2)
姚家湾博客
04-20 2472
Xtend是和xtext 相伴的程序设计语言,使用它实现语言翻译十分方便。xtend 的最大特点是它具有模板的功能,这项功能类似与php 产生动态web 网页的方式。用起来十分的方便。 ...
eclipse中xtext/xtend的安装及注意事项
raisedragon的博客
04-11 2513
在菜单栏中选择Help->Install New Software,Add…站点http://download.itemis.de/updates,该站点包含所有必须和可选的Xtext组件 在TMF Xtext分类中选择Xtext SDK,然后点击Next直到看到Finish向导 在下载好之后,Eclipse会重启,现在可以使用Xtext了 注意事项: 1、打开eclipse marke...
使用XtextEclipse和IntelliJ开发DSL
最佳 Java 编程
05-30 928
在这篇文章中,我们将看到如何开发一种简单的语言。 我们的目标是: 语言的解析器 IntelliJ的编辑器 。 编辑器应具有语法突出显示,验证和自动完成功能 我们还将免费提供Eclipse和Web编辑器的编辑器 ,但请包含您的兴奋之处,本文中不再赘述。 去年,我专注于学习新知识(主要是Web和ops知识),但是我仍然最喜欢的一件事就是开发DSL(领域特定语言)。 我使用的第...
Codesys之ST编程基础-1.初识Codesys与ST
刺客
07-31 4079
STStructured Text)是针对自动化系统的高级文本编程语言ST使用了高级语言的许多传统特性,包括:变量、操作符和控制流程语句。其语法类似于C语言。C语言是面向过程的编程语言,而ST文本是面向对象的编程语言
eclipse开发项目必装的插件以及参数配置
ganhaiqiang420的博客
04-05 3460
现在开发java项目普遍使用idea了,但使用eclipse的也不少,如果要用的顺手点,还是需要一些优化和相关插件支持的,下面结合我自己实际工作介绍一下我是如何用eclipse的。
写文章

热门文章

  • OPC UA 的本质 41451
  • OPC UA 的发布/订阅(PUB/SUB)模式 24055
  • C++ strptime 和strptime函数的使用方式 22936
  • 使用C++ 编写嵌入式应用程序 21642
  • terminate called after throwing an instance of 'std::runtime_error'的解决方法 21382

分类专栏

  • 4DIAC 28篇
  • IEC61499 110篇
  • 软件哲学 15篇
  • 智能制造 29篇
  • NodeJS 6篇
  • zynq 7篇
  • RT Thread 5篇
  • 图数据库 5篇
  • Xtext 3篇
  • Go 15篇
  • 笔记 1篇
  • mbed 22篇
  • linux 46篇
  • iot 50篇
  • opc ua 29篇
  • C++ 46篇
  • edge 16篇
  • docker 8篇
  • 工业App 36篇
  • python 5篇

最新评论

  • RT-Thread使用DP83640 实现IEEE1588 协议笔记

    大鼻子JOJO: 您这里面把DP83640读写寄存器的函数都重写了,改成了单片机库函数中的函数的封装,可是DP83640的寄存器是分页管理的,为什么可以不按页查找呢

  • 构建基于RT-Thread高性能工业电脑

    tupelo-shen: 这个实现了吗?

  • 信息模型的哲学思想

    xftimes: 深刻,醍醐灌顶,无以言表

  • 对商品分类系统的若干问题的思考

    xftimes: 作者洞悉了数字化系统的本质

  • 对商品分类系统的若干问题的思考

    普通网友: 写的真好,细节很到位!【我也写了一些相关领域的文章,希望能够得到博主的指导,共同进步!】

大家在看

  • 酒吧收银系统解决方案——未来之窗行业应用跨平台架构
  • 解决idea配置文件加载超大的问题 23

最新文章

  • NodeJS 使用百度翻译API
  • 解决UNSPSC商品分类的层级不足的方法
  • 随笔:标准是金
2024
10月 3篇
09月 5篇
08月 6篇
07月 11篇
06月 11篇
05月 7篇
04月 8篇
03月 16篇
02月 9篇
01月 5篇
2023年67篇
2022年58篇
2021年53篇
2020年96篇
2019年83篇
2018年21篇

目录

目录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家南宁环保玻璃钢雕塑设计顺义区商场美陈价格海南玻璃钢GRC雕塑厂上海玻璃钢广场雕塑价格玻璃钢雕塑花坛玻璃钢花盆制品制作方法亳州定制玻璃钢雕塑生产厂家新密镂空玻璃钢雕塑玻璃钢古代人物雕塑设计方案长沙珠海玻璃钢卡通雕塑供应厂家河南大型商场美陈研发公司武汉商场美陈广告公司上海室内商场美陈市场价甘肃陇南玻璃钢雕塑厂河南通道商场美陈研发河北定做玻璃钢牛雕塑泰州商场节庆美陈东莞玻璃钢动物雕塑销售价格辽宁节日商场美陈宜宾玻璃钢卡通雕塑云南玻璃钢人物雕塑厂家徐州玻璃钢雕塑常用解决方案徐州美陈商场布置十二生肖玻璃钢雕塑制作广西玻璃钢雕塑厂打磨工招聘设计玻璃钢雕塑哪里有杭州商场美陈布置设计安装乐山玻璃钢气球雕塑玻璃钢雕塑销售方法保定玻璃钢雕塑设计香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化