摘要:基于IEC61131-3标准的结构化文本语言(language称为ST)是一种高级语言到控制器的编程语言(PLC)的语言,介绍了如何词法分析工具相结合莱克斯Yacc语法分析工具。
ST中设计并实现编译器前端,主要介绍词法分析,解析,语义分析和语法分析中涉及的数据结构和相关算法。间代码生成。IEC61131-3标准;文本语言的结构化语言;可编程控制器莱克斯;基于结构化文本到标准语言IEC61131-3(称为ST语言),为在可编程控制器(PLC)的语言的编程语言的高级文本的yacc,其在IEC61131-3标准位置以蓝色示出在图1中,它可用于描述函数,功能块和程序(如其他高级语言)的行为,以及描述图中步骤,操作和转换的行为。序功能流程(SFC)。

构化文本语言具有与BASIC,PASCAL或C类似的形式。是为工业控制应用程序开发的编程语言,具有强大的编程功能,自由编程格式紧凑的数据。悉高级语言开发的人员更容易理解和使用,因此非常适合具有复杂计算和可移植性的应用程序。构化文本语言由一系列由操作数和运算符组成的逻辑结构表达式语句组成。本指令包括赋值语句,功能块调用指令,IF结构指令,CASE结构指令和FOR结构指令。WHILE结构语句,REPEAT结构语句,RETURN结构语句,EXIT结构语句,空语句等。

FOR指令程序典型的和运算如下:结构化文本语言中的命令程序写入成为PLC系统的CPU可识别的目标语言,必须编译或编译才能完成PLC。程系统的结构如图2本文探讨了如何设计和实施前的API跨平台的构建系统的程序,汇编写在结构化文本语言的控制程序说明中间代码结构,能够根据不同AP系统的CPU产生相应的对应关系。编代码或机器语言。统分析与设计一个全面的结构化文本语言编译系统,主要包括词法分析,解析,语义分析和中间代码生成,目标代码生成,目标代码优化,以及其他主要步骤。
系统的主要目标是通过词法分析,解析和语义分析,将书面命令程序转换为结构化文本语言,转换为自定义中间代码结构,以及中间代码生成。于不同操作环境的CPU指令生成目标代码。法分析的第一阶段词法分析是由单词的几个符号及其相应属性的符号表识别结构化文本语言编写控制程序,程序的源和存储公认的符号的话作为语法分析阶段。常,词法分析阶段的第一步是将输入源程序放在输入缓冲区中并执行预处理以删除注释,空格,制表符和换行符。程序的换行符。译系统将预处理步骤和字标的识别阶段结合起来进行处理。(1)词汇分析工具LEX简介该编译系统的词法分析程序将由词法分析工具LEX自动生成。LEX是Lexcial Compiler的缩写,是UNIX环境中众所周知的工具,其主要功能是生成词法分析器(扫描仪)的源代码C. LEX是一个程序,它接受包含正则表达式作为输入的文本文件,以及每个表达式匹配时采取的操作。
* .L描述词法分析器的信息时,编译器LEX后描述文件生成然后源代码文件C lex.yy.c中由C编译器编译成一个词法分析器,其过程执行在图4中示出。4.显示。(2)符号表设计在词法分析步骤中识别的符号词及其对应的属性应存储在称为符号表的存储结构中,作为后续步骤的输入源如语法分析和语义分析。必须在以下步骤中修改或交换信息。此,在整个编译过程中,结构合理,性能稳定,效率高的符号表的设计起着非常重要的作用。结构化文本的语言中,要识别的单词符号可以分为五类:关键字,标识符,常量,运算符和其他唯一字符系统在单链接列表中创建符号表,毫无意义唯一的。表中每个节点的数据结构如下:typedef struct tagSymbolNode {char chContent [128]; // nTokenType中单词符号的内容; //符号类型int nSubType; //符号字int nLine; //源程序中的行号} SymbolNode;因此,单链接列表的数据结构可以设计如下:typedef struct tagSymbolList {SymbolNode symbolNode; //符号节点信息tagSymbolList * pNext; //指向下一个节点} SymbolList;在上面构思的符号节点结构中,符号字的nTokenType类型标识关键字类别,标识符,常量,运算符等中的哪一类。
nTokenType类型符号字属于一个常数,该亚型nSubType符号字被用来标识种恒定其所属如整数,恒温阀芯一个真正的类型,一种类型的时间等。析和分析步骤由词汇分析程序分析的一系列单词符号作为输入或分析对象,其主要任务是分析语法结构源程序根据结构化文本语言的语法规则。词符号形成各种语法类别(例如以下变量,各种表达式,各种指令,程序段或子程序等),并且在分析期间,源程序通过语法验证一次源程序包含符合语法规则的表达式或语句,生成错误消息,提示用户进行更改。常,解析器具有各种输出形式,通常采用由方法表示的语法树的形式。据语法树的不同方向,语法分析主要分为两种方式:从上到下,从下到上。译器使用YACC语法分析工具,自下而上方法中的LALR(1)分析方法,生成用于分析的状态转换表,然后对不同的语法执行语法检查状态转换表的状态转换方向。(1)介绍解析工具YACC YACC代表另一个编译器编译,也称为解析器生成器,主要用于与LEX词法分析工具来生成相应的C代码,通过C编译器。
译后生成一个分析器。YACC使用语言的分析LRIA分析算法(1),含有该语法规则(语法生产)语法描述文件在巴克斯范式(BNF)和相应的股表示语法规则。(后缀名为* .Y)作为输入,以及为输出语言生成解析过程的程序。YACC根据其编译选项命令生成各种不同的输出文件,主要是与语法规则对应的y.tab.c解析器和包含状态转换信息的y.output文件(或相似的名字)。件)。译系统主要使用y.output文件中结构化文本语法规则生成的状态转换信息来指示状态转换的方向,即根据当前的状态信息,下一步是“移动”或“协议”。操作产生的结构化文本语言条目YACC和局部状态变化信息的部分语法是:局部语法规则instruction_start – > statement_liststatement_list – > STATEMENT_LIST statementstatement_list – > statementstatement – >“; “转变信息部分状态IDENTIFY移和去指示1DIRECTVAR移并移动到2IF状态,然后去3statement_start状态,转到169statement_list状态,转到11statement状态,转到状态12assignment_statement,转到状态13(2)分析中的主要数据结构,因为系统使用语法分析YACC工具生成的状态转换信息用于分析YACC使用的LALR分析算法(1)必须具有状态堆栈和符号堆栈才能实现,因此必须在系统中构建状态。
叠SymbolStack符号。tateStack状态的栈保存状态,以再转换和电池SymbolStack符号被用于存储非末端符号和终止子语法规则结构化文本语言小鬼在州过渡过程中液化。于语义分析和中间代码生成的源控制程序在分析和验证后与结构化文本语言的语法规则一致,但还必须检查属性,类型等。上下文相关的,即语义分析,例如数组索引。须是整数,赋值语句的左侧和右侧必须符合语言规范的要求。义分析主要包括程序编译时语义控制的静态语义分析和执行目标程序时语义控制的语义动态分析,本节的主要特点是静态语义分析,例如未声明的标识符,用于零排除等。态语义错误主要由保护措施来处理。语义分析过程中,如果发现不遵守语言规范,则会生成一条错误消息,邀请用户进行修改。
控制源程序的语法和语义分析之后,如果没有错误,则将其转换为自定义中间代码结构。(1)两堆语义分析必须与语义分析过程的分析并行。果出现语义错误,则必须将错误消息发送给用户。义信息堆栈结构SemanticStack必须设计用于存储。

义信息,其中堆栈中的数据结构可以设计如下:typedef struct tagSemanticInfo {string strIdentifier; // DWORD名称标识符dwBaseType; //基本数据类型字符串strComplexType; //复杂数据类型unsigned int uiDimension; //表大小bool bConstant; //识别常量bool bWrite; //识别可写属性} SemanticInfo;另外,一旦语义分析完成,源代码控制程序必须转换为中间代码结构;因此,需要语法来存储中间代码信息。SyntaxTreeStack树堆栈结构,其中堆栈中的数据结构将在下一节中介绍。(2)一旦通过语法和语义解析了中间代码生成和中间代码结构,就必须将源代码控制程序转换为中间代码结构。间代码可以根据与CPU不同的指令生成汇编代码或相应的机器语言。统的中间代码被设计为抽象语法树,其中每个树节点的结构是:struct TreeNode {int Op; //操作类型类型NodeType; //节点类型TreeNode Kids [2];节点的联合{Cnst值; //常量值Sym符号; //符号} LeafNode;};每个节点形式,如图5所示,表示基本操作,其ASGN表示当前操作类型赋值,I表示节点。型是整数。

如,赋值语句具有:= b 0.5对应于转换的抽象语法树如图6所示,其中a和b是整数。体操作过程如下:首先,节点(ADDRG P)取变量b的地址,节点(INDIR I)从地址(b)获取b的值。量b。于常量0.5默认为double类型,因此节点(CVD I)将整数变量b的值转换为double;节点(CSNT D)取常数值0.5,节点(ADD D)执行加法,结果为double,因为赋值指令左边a的值是一个类型整数,结果在赋值操作之前转换为整数,左节点(ADDRG P)取变量a的地址,最后将b 0.5的结果赋给变量a。
结和展望摘要本文档解释了如何使用LEX词法分析工具和YACC语法分析工具来设计和实现其前端编译的词法分析。析器分析主要数据结构,算法和可用于不同PLC执行环境的中间代码结构。设计方案执行的结构化文本语言结构的前端程序可以根据不同的CPU指令方便地应用于各种操作环境,以编译相应的编译后端,从而实现多种平台。Outlook尽管此设计可用于在结构化文本语言中实现跨平台的跨平台编译器程序,但仍有许多优化领域:例如,符号表的优化与质量和整个编译器的效率。文不涉及此主题。时,本文没有解释如何将中间代码结构转换为机器语言代码以及可以实际执行的相关地址分配方案。些任务必须在下一步完成才能实现完整的编译器。
本文转载自
恒温阀芯 https://www.wisdom-thermostats.com
