可编程控制器结构化文本语言编译前端探究及设计.docVIP

可编程控制器结构化文本语言编译前端探究及设计.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
可编程控制器结构化文本语言编译前端探究及设计

可编程控制器结构化文本语言编译前端探究及设计摘 要:基于IEC61131-3标准的结构化文本语言(简称ST语言)是可编程控制器(简称PLC)编程语言中的一种高级文本语言,文中论述了如何结合词法分析工具Lex及语法分析工具Yacc来进行ST语言编译器前端的设计与实现,其中主要介绍了词法分析、语法分析、语义分析及中间代码生成这几个阶段所涉及到的相关数据结构与算法。 关键词:IEC61131-3标准;结构化文本语言;可编程控制器;Lex;Yacc 基于IEC61131-3标准的结构化文本语言(简称ST语言)作为可编程控制器(简称PLC)编程语言中的一种高级文本语言,其在IEC61131-3标准中的位置如图1中蓝色标记所示。它可以像其它高级语言一样用来描述功能、功能块和程序的行为,还可在顺序功能流程图(简称SFC)中描述步、动作和转变的行为。 结构化文本语言在形式上和BASIC、PASCAL或C语言很相似,它作为一种专门为工业控制应用开发的编程语言,具有很强的编程能力,编程格式自由,程序紧凑具有很强的数据处理能力,对于熟悉计算机高级语言开发的人员来说更容易理解和使用,因此其非常适合运用在具有复杂计算的应用中,可移植性好。 结构化文本语言由一系列具有逻辑结构的表达式语句构成,表达式由操作数和操作符组成,其基本的语句有赋值语句、功能块调用语句、IF结构语句、CASE结构语句、FOR结构语句、WHILE结构语句、REPEAT结构语句、RETURN结构语句、EXIT结构语句、空语句等。一个典型的求和运算的FOR语句程序如下所示: 使用结构化文本语言编写的控制程序变成PLC系统的CPU可以识别的目标语言,必须经过编译或者交叉编译程序才能完成,其所对应的PLC编程系统的结构如图2所示。本文所研究的是如何设计与实现一个可跨平台的PLC编译系统的前端程序,将结构化文本语言编写的控制程序编译成一种中间代码结构,该中间代码可以根据不同PLC系统的CPU生成其对应的汇编代码或机器语言。 1 系统分析与设计 一个完整的结构化文本语言编译系统主要包括词法分析、语法分析、语义分析及中间代码生成、目标代码生成、目标代码优化等几个主要阶段,其各个阶段的关系如图3所示。本系统的主要目标是将结构化文本语言编写的控制程序经过词法分析、语法分析及语义分析、中间代码生成这几个阶段将其转换成一种自定义的中间代码结构,而该中间代码可以根据不同的运行环境所对应的CPU指令生成目标代码。 1.1 词法分析 词法分析阶段就是将结构化文本语言编写的控制程序源程序识别成若干个单词符号,并将这些识别出来的单词符号连同其对应的相关属性一起存储到符号表中,以作为语法分析阶段的输入。一般地,词法分析阶段的第一步是将输入的源程序放在一个输入缓冲区中,进行预处理,将源程序中的注释、空格、制表符、回车符及换行符删除,而本编译系统则将预处理阶段和单词符号的识别阶段合并在一起进行处理。 (1)词法分析工具LEX简介 本编译系统的词法分析程序将利用词法分析工具LEX自动生成。LEX是Lexcial Compiler的缩写,是UNIX环境下非常著名的工具,主要功能是生成一个词法分析器(Scanner)的C源代码。LEX是一个将包含了正则表达式的文本文件作为其输入的程序,此外还包括每一个表达式被匹配时所采取的动作。描述词法分析器信息的描述文件*.L,经过LEX编译后,生成一个lex.yy.c的C源代码文件,然后由C编译器将其编译生成一个词法分析器,其执行过程如图4所示。 (2)符号表的设计 在词法分析阶段识别出来的单词符号及其对应的相关属性必须存储到一个称为符号表的存储结构中,以作为语法分析、语义分析等后续阶段的输入来源,同时在后续各个阶段也必须对其进行修改或交换信息,因此设计一个结构合理、性能稳定、高效率的符号表在整个编译过程中起到非常重要的作用。 在结构化文本语言中可将需要识别的单词符号分为关键字、标识符、常量、操作符及其它单个字符等五大类,本系统将符号表设计成一个单向链表的形式,其中单向链表中每一个节点的数据结构如下所示: typedef struct tagSymbolNode { char chContent[128];//单词符号内容 int nTokenType; //单词符号的类型 int nSubType; //单词符号的子类型 int nLine; //在源程序中的行号 }SymbolNode; 因此单向链表的数据结构可设计成如下所示: typedef struct tagSymbolList { SymbolNode symbolNode;//

文档评论(0)

docman126 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档