CN117193781B - 一种面向simscript语言的抽象语法树构建方法和装置 - Google Patents
一种面向simscript语言的抽象语法树构建方法和装置 Download PDFInfo
- Publication number
- CN117193781B CN117193781B CN202310980317.5A CN202310980317A CN117193781B CN 117193781 B CN117193781 B CN 117193781B CN 202310980317 A CN202310980317 A CN 202310980317A CN 117193781 B CN117193781 B CN 117193781B
- Authority
- CN
- China
- Prior art keywords
- statement
- simscript
- grammar rules
- expr
- grammar
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000010276 construction Methods 0.000 title claims abstract description 45
- 230000011218 segmentation Effects 0.000 claims abstract description 56
- 238000000034 method Methods 0.000 claims abstract description 16
- 230000014509 gene expression Effects 0.000 claims description 40
- 230000006870 function Effects 0.000 claims description 21
- 238000004458 analytical method Methods 0.000 claims description 16
- 238000004364 calculation method Methods 0.000 claims description 13
- 230000000750 progressive effect Effects 0.000 claims description 9
- 239000002131 composite material Substances 0.000 claims description 8
- 238000004590 computer program Methods 0.000 claims description 6
- 238000012545 processing Methods 0.000 claims description 6
- 238000004088 simulation Methods 0.000 abstract description 13
- 230000003068 static effect Effects 0.000 abstract description 3
- 150000001875 compounds Chemical class 0.000 description 5
- 238000010586 diagram Methods 0.000 description 5
- 238000003491 array Methods 0.000 description 4
- 230000000295 complement effect Effects 0.000 description 3
- 238000007689 inspection Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 230000003993 interaction Effects 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Landscapes
- Machine Translation (AREA)
Abstract
本发明涉及一种面向SIMSCRIPT语言的抽象语法树构建方法和装置。该方法包括:对SIMSCRIPT语言的9种语法规则进行抽象和构建;对三类SIMSCRIPT代码文件进行扫描和分词;基于分词结果构建叶子节点,基于语法规则构建叶子节点的逻辑关系,生成抽象语法树。本发明提供的技术方案以面向仿真领域的SIMSCRIPT语言为基础,以抽象语法树的形式来展现SIMSCRIPT语言的语法规则,为建模人员和编程人员之间提供了桥梁,为实现对SIMSCRIPT研发的仿真系统做静态语法检查、空指针异常检查、代码风格检查、格式化、代码高亮、以及代码错误提示、自动补全等工作提供了技术基础。
Description
技术领域
本发明属于计算机技术领域,具体涉及一种面向SIMSCRIPT语言的抽象语法树构建方法和装置。
背景技术
SIMSCRIPT是一种面向离散事件仿真的、历史悠久的建模语言。该语言具有清晰的仿真机制,抽象层次高,且自我说明能力强,与目前市场上流行的语言(比如C/C++、Java、Python)相比,SIMSCRIPT在语法规则设计、语言应用方式上有着巨大的差异。
抽象语法树是源代码结构的一种抽象表示,它以树的形状表示语言的语法结构。抽象语法树通常借助词法解析器和语法解析器生成,首先,词法解析器将输入的字符序列转换为单词;其次,语法解析器以词法解析器的输出作为输入,依据语言规则,生成抽象语法树。抽象语法树在代码语法检查、代码风格检查、代码自动格式化、代码关键词高亮、代码错误提示以及代码自动补全功能上有着重要的应用。
SIMSCRIPT语言能够支持大规模离散事件仿真,并成功应用于复杂离散事件仿真推演系统,应用前景非常广阔。但是,目前还没有面向SIMSCRIPT语言的抽象语法树构建方法,因此,本发明提出一种面向该语言的抽象语法树构建方法。
中国专利:基于Python代码重建抽象语法树的方法、电子设备(CN 1109710307A),是针对Python语言的词法和语法做来重建抽象语法树,而Python和SIMSCRIPT的词法规则差异较大,其创建抽象语法树的方式并不适用于SIMSRIPT语言。因此,目前还没有面向SIMSCRIPT语言的抽象语法树的构建方法,而本发明主要提出了一种面向SIMSCRIPT语言的抽象语法树的构建方法。
发明内容
本发明的目的是提供了一种面向SIMSCRIPT语言的抽象语法树的构建方法和装置,抽取总结该语言的语法规则,构建其抽象语法树,更加直观的呈现出语言的结构,为SIMSCRIPT语言的静态语法检查、空指针异常检查、代码风格检查、格式化、代码高亮、以及代码错误提示、自动补全功能上的开发提供了技术基础。
本发明采用的技术方案如下:
一种面向SIMSCRIPT语言的抽象语法树构建方法,包括以下步骤:
对SIMSCRIPT语言的语法规则进行抽象和构建;
对SIMSCRIPT代码文件进行扫描和分词;
基于分词结果构建叶子节点,基于语法规则构建叶子节点的逻辑关系,生成抽象语法树。
进一步地,所述对SIMSCRIPT语言的语法规则进行抽象和构建,是对SIMSCRIPT语言中注释、变量、基础数据类型、复合数据类型、指针、运算符、控制语句、函数、输入输出流共9种语法规则进行构建。
进一步地,所述对SIMSCRIPT代码文件进行扫描和分词,是对声明文件、主程序文件和例程文件共三类文件进行扫描和分词。
进一步地,所述对SIMSCRIPT代码文件进行扫描和分词,包括以下步骤:
解析声明文件PREAMBLE.SIM,根据基础数据类型和复合数据类型的语法规则,对PREAMBLE.SIM中的代码进行逐行扫描和分词,构建PREAMBLE.SIM文件的分词集合;
解析主程序文件MAIN.SIM,根据9种语法规则对MAIN.SIM中的代码进行逐行扫描和分词,构建MAIN.SIM文件的分词集合;
判断主程序是否调用了其它例程,如果调用了其它例程则继续扫描其它例程,根据9种语法规则对例程文件中的代码进行逐行扫描和分词,构建例程文件的分词集合;例程解析结束后重新回到主程序文件中,直至主程序结束。
进一步地,采用以下步骤生成抽象语法树:
加载三类文件的分词结果;
重新扫描三类文件,对文件中的代码做分块处理,基于SIMSCRIPT语法规则对各个代码块中包含的分词做语法分析;如果代码块中包含表达式语句,创建EXPR作为该代码块的节点,并对该代码块中包含的表达式继续做语法分析;如果代码块中包含赋值或控制语句,创建STATEMENT作为该代码块的节点,并对该代码块中包含的赋值或控制语句继续做语法分析;如果代码块不包含以上两种语句,直接以代码块中的分词结果创建节点;
按照分词在代码中的出现顺序,将同一层的节点从左到右排列。
一种面向SIMSCRIPT语言的抽象语法树构建装置,其包括:
语法规则构建模块,用于对SIMSCRIPT语言的语法规则进行抽象和构建;
代码解析模块,用于对SIMSCRIPT代码文件进行扫描和分词;
抽象语法树生成模块,用于基于分词结果构建叶子节点,基于语法规则构建叶子节点的逻辑关系,生成抽象语法树。
本发明的有益效果如下:
本发明提供的技术方案以面向仿真领域的SIMSCRIPT语言为基础,以抽象语法树的形式来展现SIMSCRIPT语言的语法规则,为建模人员和编程人员之间提供了桥梁,为实现对SIMSCRIPT研发的仿真系统做静态语法检查、空指针异常检查、代码风格检查、格式化、代码高亮、以及代码错误提示、自动补全等工作提供了技术基础。本发明有助于解决基于SIMSCRIPT语言的复杂离散事件仿真系统中的代码的语法问题、格式不规范问题、隐藏的空指针问题,同时有助于提供代码自动补全功能,不仅为建模者提供了代码检查的手段,提升代码的可读性和可靠性,同时能够提升代码编写效率。
附图说明
图1是本发明方法的整体结构图。
图2是本发明方法的功能流程图。
图3是SIMSCRIPT代码解析流程图。
图4是抽象语法树生成流程图。
图5是程序源码示例图。
图6是抽象语法树示例图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步详细说明。
本发明提供一种面向SIMSCRIPT语言的抽象语法树构建方法,主要包括语法规则构建模块、代码解析模块和抽象语法树生成模块,整体结构见图1。SIMSCRIPT语法包括注释、变量、基础数据类型(INT、REAL、TEXT、ALPHA)、复合数据类型(实体、事件、数组、集合)、指针、运算符、控制语句、函数、输入输出流9种。语法规则构建模块主要实现对9种语法规则的自动构建功能。SIMSCRIPT源程序包括声明文件(用来声明全局变量,命名为PREAMBLE.SIM)、主程序文件(用来实现主函数,命名为MAIN.SIM)和例程文件(例程文件用来定义事件和函数,文件后缀名为SIM)三类。代码解析模块主要对三类文件进行扫描和分词。抽象语法树生成模块能够基于语法规则构建模块的语法规则和代码解析模块的分词结果构建语法树并将语法树的结构进行输出。
SIMSCRIPT语言的抽象语法树构建流程包括三个步骤:
步骤一:对SIMSCRIPT语言的9种语法规则进行抽象和构建。
步骤二:对三类SIMSCRIPT代码文件进行扫描和分词。
步骤三:基于步骤二的分词结果构建叶子节点,基于步骤一的语法规则构建叶子节点的逻辑关系,生成抽象语法树。整体功能流程如图2所示。
一.SIMSCRIPT语法规则构建模块
本发明的面向SIMSCRIPT语言的语法规则构建模块过程,包括对注释、变量、基础数据类型(INT、REAL、DOUBLE、TEXT、ALPHA)、复合数据类型(实体、事件、数组、集合)、指针、运算符、控制语句、函数、输入输出流9种语法规则的构建功能,具体功能如下所示。
1.注释语法规则构建
SIMSCRIPT语言支持单行注释,注释符号为两个单引号,两个单引号后的内容为注释内容。
2.变量语法规则构建
SIMSCRIPT变量类型包括基础数据类型和复合数据类型,变量名称由若干个字母和数字组合。变量命名规则用如下正则表达式表示:
[A-Za-z_.][A-Za-z_.0-9]*|[0-9][A-Za-z]+
其中,[A-Za-z_.]表示字母、下划线或点,[A-Za-z_.0-9]表示字母、下划线、点或数字,*表示匹配前面的字符,出现零次或多次,|表示或,[0-9]表示数字,[A-Za-z]表示字母,+表示匹配前面的字符,至少出现一次或多次。
3.基础数据类型语法规则构建
SIMSCRIPT基础数据类型有INT(整型)、REAL(单精度实数类型)、DOUBLE(双精度实数类型)、TEXT(字符串类型)、ALPHA(字符类型)。其中,INT、REAL和DOUBLE主要用于数值计算,TEXT用于字符串处理,ALPHA用于字符处理。
SIMSCRIPT基础数据类型的的语法定义规则如表1所示。INT是用来定义SIMSCRIPT语言的INT类型的语法规则,INT类型包括0和非0的整数类型数字。
REAL用来定义SIMSCRIPT语言的REAL类型的语法规则,REAL类型即单精度实数类型,单精度实数类型分为三部分,分别是整数部分、小数点“.”、小数部分。整数部分由一个或者多个数字组成,小数部分由0个或者多个数字组成,对应的表示形式分别为9.82、9.,均为SIMSCRIPT语言的合法表示形式。
DOUBLE用来定义SIMSCRIPT语言的DOUBLE类型的语法规则,DOUBLE类型即双精度实数类型,DOUBLE和REAL的语法规则相同。
TEXT用来定义SIMSCRIPT语言的TEXT类型的词法规则,TEXT类型即字符串类型,字符串以双引号作为开始和结束,在双引号内,可以是任意字符,如“HELLO WORLD”。
ALPHA用来定义SIMSCRIPT语言的ALPHA类型的词法规则,ALPHA类型即字符类型,ALPHA和TEXT的语法规则相同。
表1基础数据类型语法规则
名称 | 规则 |
INT | ‘0’|[1-9][0-9]* |
REAL | [0-9]+‘.’[0-9]* |
DOUBLE | [0-9]+‘.’[0-9]* |
TEXT | ['"].*?['"] |
ALPHA | ['"].*?['"] |
4.复合数据类型语法规则构建
复合数据类型包括实体、事件、数组和集合。
实体包括临时实体和永久实体,临时实体用来表示仿真过程中临时创建的实体,临时实体能够创建也能够消亡。永久实体表示仿真过程中的资源,创建后一直持续到仿真结束。临时实体用TEMPORARY ENTITIES关键词声明,用CREATE关键词创建,用DESTROY关键词销毁。永久实体用PERMANENT ENTITIES关键词声明,用CREATE EVERY关键词创建。
事件是离散事件系统的基本概念,事件的发生引起系统状态的改变。事件用EVENTNOTICES INCLUDE关键词声明,用SCHEDULE关键词创建,用CANCEL关键词取消。
数组代表一段连续的内存空间,能够存放多个相同类型的数据元素。数组用RESERVE关键词分配内存空间,用RELEASE关键词释放内存空间。数组元素通过数组名称和索引来访问。例如TEST[1]表示TEST数组中的第一个元素。
集合通过双向链表存放多个相同类型的数据元素。集合通过FILE关键词添加数据元素,通过REMOVE关键词移除数据元素。
5.指针语法规则构建
指针用来存放内存地址。通过DEFINE XX AS APOINTER VARIABLE语句定义(示例中XX为指针变量名称)。
6.运算符语法规则构建
运算符语法规则包括赋值语句语法规则和表达式计算语法规则。赋值语句包括以LET、ADD、SUBTARCT开始的语句。关键字LET开头的语句为赋值语句,以关键字ADD开头的语句为加法的表达式计算,以关键字SUBTARCT开头的语句为减法表达式的计算,其中,表达式计算也可以是“+”、“-”、“*”、“/”、“**”等标识符连接的语句。
赋值语句的语法规则如下所示:
LET VARIABLE=EXPRESSION
ADD语句的语法规则如下所示:
ADD EXPRESSION TO VARIABLE
SUBTARCT语句的语法规则如下所示:
SUBTARCT EXPRESSION FROM VARIABLE
表达式计算的语法规则如下所示:
VARIABLE+|-|*|/|**VARIABLE
以上四个示例中VARIABLE代表变量,EXPRESSION代表表达式。最后一个示例中运算符号依次为加、减、乘、除、幂运算。
7.控制语句语法规则构建
控制语句包括分支结构语句和循环语句。分支结构语句包括IF-ALWAYS和IF-ELSE-ALWAYS,循环语句包括FOR-DO-LOOP、UNTIL-DO-LOOP和WHILE-DO-LOOP。
分支结构语句语法规则如表2所示,表2中EXPR代表IF语句判断条件的逻辑表达式。STATEMENT代表任意SIMSCRIPT语句。
表2分支结构语法规则示例
语法名称 | 语法规则 |
IF-ALWAYS | ‘IF’EXPR STATEMENT*‘ALWAYS’ |
IF-ELSE-ALWAYS | ‘IF’EXPR STATEMENT*‘ELSE’STATEMENT*‘ALWAYS’ |
循环结构语句规则如表3所示,表3中ID代表变量名称,EXPR代表数值计算表达式,STATEMENT代表任意SIMSCRIPT语句。FOR-DO-LOOP语句的控制条件以ID‘=’EXPR‘TO’EXPR规则来表示。UNTIL-DO-LOOP语句和while语句的控制条件以EXPR来表示。
表3循环结构语法规则示例
语法名称 | 语法规则 |
FOR-DO-LOOP | ‘FOR’ID‘=’EXPR‘TO’EXPR‘DO’STATEMENT*‘LOOP’ |
UNTIL-DO-LOOP | ‘UNTIL’EXPR‘DO’STATEMENT*‘LOOP’ |
WHILE-DO-LOOP | ‘WHILE’EXPR‘DO’STATEMENT*‘LOOP’ |
8.函数语法规则构建
函数包括主函数(MAIN)和例程(ROUTINE),其中主函数是定义程序的入口函数,例程定义其它函数。主函数由关键字“MAIN”作为开始字符,关键字“END”作为结束字符,开始和结束字符之间是MAIN程序的组成语句。例程程序由关键字“ROUTINE”和例程名字标识符作为开始,以关键字“END”作为结束,开始和结束之间是例程程序的组成语句。
9.输入输出流语法规则构建
输入输出流语法规则构建包括输入语句语法规则构建和输出语句语法规则构建。输入输出流语法规则如表4所示。表4中,ID表示变量名称。
READ是输入语句,READ可以读入多个变量或者一个变量,读入多个变量时,变量之间用“,”作为分隔符。PRINT是输出语句,PRINT语法规则中的INT用来表示需要输出的语句行数,PRINT语句的WITH表达式是可选项,WITH后的变量名称代表需要输出的变量名称。LINE/LINES表示关键词“行”,多用于输出语句代表输出几行,THUS表示关键词“如下”,后面跟输出语句格式。
表4输入输出语法规则示例
语法名称 | 语法规则 |
READ | ‘READ’ID(‘,’ID)* |
‘PRINT’INT(‘LINE’|‘LINES’)(‘WITH’ID)?‘THUS’ |
二.SIMSCRIPT代码解析模块
SIMSCRIPT源程序包括声明文件(用来声明全局变量,命名为PREAMBLE.SIM)、主程序文件(用来实现主函数,命名为MAIN.SIM)和例程文件(例程文件用来定义事件和函数,文件后缀名为SIM)三类。代码解析模块主要对三类文件进行解析。SIMSCRIPT代码解析流程如图3所示。
步骤一:解析声明文件PREAMBLE.SIM,PREAMBLE文件以关键字“PREAMBLE”开始,以关键字“END”结束,包含对所有全局变量和事件的定义。全局变量可以是基础数据类型的变量,也可以是复合数据类型的变量。根据SIMSCRITP语法规则构建模块中基础数据类型和复合数据类型的语法规则,对PREAMBLE.SIM中的代码进行逐行扫描和分词。构建PREAMBLE.SIM文件的分词集合。
步骤二:解析主程序文件MAIN.SIM,MAIN文件是每个SIMSCRIPT程序必须包含的文件,且全局唯一。在主程序中可以定义局部变量,可以通过使用输入输出语句来实现系统与用户的交互,可以通过逻辑控制语句等来实现主程序的逻辑关系。根据SIMSCRITP语法规则构建模块中的9种语法规则对MAIN.SIM中的代码进行逐行扫描和分词。构建MAIN.SIM文件的分词集合。
步骤三:判断步骤二中主程序是否调用了其它例程,如果调用了其它例程就继续扫描其它例程,例程中可以定义局部变量,可以通过使用输入输出语句来实现系统与用户的交互,可以通过逻辑控制语句等来实现主程序的逻辑关系。根据SIMSCRITP语法规则构建模块中的9种语法规则对例程文件中的代码进行逐行扫描和分词。构建例程文件的分词集合。例程解析结束后重新回到主程序文件中,直至主程序结束。
三.SIMSCRIPT抽象语法树生成模块
抽象语法树生成模块能够基于代码解析模块的分词结果构建语法树的叶子节点,能够基于SIMSCRITP语法规则构建模块的语法规则构建叶子节点的逻辑关系。图4是SIMSCRIPT抽象语法树生成的运行流程图。
步骤一:加载SIMSCRIPT代码解析模块中三类文件的分词结果。
步骤二:重新扫描三类文件,对文件中的代码做分块处理,基于SIMSCRIPT语法规则对各个代码块中包含的分词做语法分析。如果代码块中包含表达式语句,创建EXPR作为该代码块的节点,并对该代码块中包含的表达式继续做语法分析;如果代码块中包含赋值或控制语句,创建STATEMENT作为该代码块的节点,并对该代码块中包含的赋值或控制语句继续做语法分析;如果代码块不包含以上两种语句,直接以代码块中的分词结果创建节点。
步骤三:按照分词在代码中的出现顺序,将同一层的节点从左到右排列。
基于上述面向SIMSCRIPT语言的抽象语法树构建方法,以图5所示的SIMSCRIPT代码为例,构建的抽象语法树如图6所示。
本发明的关键点是:
本发明以SIMSCRIPT仿真语言为基础,提出一种面向SIMSCRIPT语言的抽象语法树构建方法,通过语法规则构建和代码解析生成抽象语法树。其中,语法规则构建能够对SIMSCRIPT语言中注释、变量、基础数据类型(INT、REAL、TEXT、ALPHA)、复合数据类型(实体、事件、数组、集合)、指针、运算符、控制语句、函数、输入输出流9种语法进行规则构建。代码解析能够对SIMSCRIPT程序三类文件进行扫描和分词处理。最后,基于语法规则和程序分词结果构建SIMSCRIPT语言的抽象语法树。
本发明的另一实施例提供一种面向SIMSCRIPT语言的抽象语法树构建装置,其包括:
语法规则构建模块,用于对SIMSCRIPT语言的语法规则进行抽象和构建;
代码解析模块,用于对SIMSCRIPT代码文件进行扫描和分词;
抽象语法树生成模块,用于基于分词结果构建叶子节点,基于语法规则构建叶子节点的逻辑关系,生成抽象语法树。
其中各模块的具体实施过程参见前文对本发明方法的描述。
本发明的另一实施例提供一种计算机设备(计算机、服务器、智能手机等),其包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行本发明方法中各步骤的指令。
本发明的另一实施例提供一种计算机可读存储介质(如ROM/RAM、磁盘、光盘),所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现本发明方法的各个步骤。
以上公开的本发明的具体实施例,其目的在于帮助理解本发明的内容并据以实施,本领域的普通技术人员可以理解,在不脱离本发明的精神和范围内,各种替换、变化和修改都是可能的。本发明不应局限于本说明书的实施例所公开的内容,本发明的保护范围以权利要求书界定的范围为准。
Claims (5)
1.一种面向SIMSCRIPT语言的抽象语法树构建方法,其特征在于,包括以下步骤:
对SIMSCRIPT语言的语法规则进行抽象和构建;
对SIMSCRIPT代码文件进行扫描和分词;
基于分词结果构建叶子节点,基于语法规则构建叶子节点的逻辑关系,生成抽象语法树;
所述对SIMSCRIPT语言的语法规则进行抽象和构建,是对SIMSCRIPT语言中注释、变量、基础数据类型、复合数据类型、指针、运算符、控制语句、函数、输入输出流共9种语法规则进行构建;
所述9种语法规则中,运算符语法规则包括赋值语句语法规则和表达式计算语法规则,其中:
赋值语句的语法规则为:LET VARIABLE=EXPRESSION;
ADD语句的语法规则为:ADD EXPRESSION TO VARIABLE;
SUBTARCT语句的语法规则为:SUBTARCT EXPRESSION FROM VARIABLE;
表达式计算的语法规则为:VARIABLE+|-|*|/|**VARIABLE;
其中VARIABLE代表变量,EXPRESSION代表表达式;
所述9种语法规则中,控制语句的语法规则包括:
分支结构语句语法规则:
IF-ALWAYS:‘IF’EXPR STATEMENT*‘ALWAYS’;
IF-ELSE-ALWAYS:‘IF’EXPR STATEMENT*‘ELSE’STATEMENT*‘ALWAYS’;
其中EXPR代表IF语句判断条件的逻辑表达式,STATEMENT代表任意SIMSCRIPT语句;
循环结构语句语法规则:
FOR-DO-LOOP:‘FOR’ID‘=’EXPR‘TO’EXPR‘DO’STATEMENT*‘LOOP’;
UNTIL-DO-LOOP:‘UNTIL’EXPR‘DO’STATEMENT*‘LOOP’;
WHILE-DO-LOOP:‘WHILE’EXPR‘DO’STATEMENT*‘LOOP’;
其中ID代表变量名称,EXPR代表数值计算表达式,STATEMENT代表任意SIMSCRIPT语句,FOR-DO-LOOP语句的控制条件以ID‘=’EXPR‘TO’EXPR规则来表示,UNTIL-DO-LOOP语句和while语句的控制条件以EXPR来表示;
所述对SIMSCRIPT代码文件进行扫描和分词,是对声明文件、主程序文件和例程文件共三类文件进行扫描和分词;
采用以下步骤生成抽象语法树:
加载三类文件的分词结果;
重新扫描三类文件,对文件中的代码做分块处理,基于SIMSCRIPT语法规则对各个代码块中包含的分词做语法分析;如果代码块中包含表达式语句,创建EXPR作为该代码块的节点,并对该代码块中包含的表达式继续做语法分析;如果代码块中包含赋值或控制语句,创建STATEMENT作为该代码块的节点,并对该代码块中包含的赋值或控制语句继续做语法分析;如果代码块不包含以上两种语句,直接以代码块中的分词结果创建节点;
按照分词在代码中的出现顺序,将同一层的节点从左到右排列。
2.根据权利要求1所述的方法,其特征在于,所述对SIMSCRIPT代码文件进行扫描和分词,包括以下步骤:
解析声明文件PREAMBLE.SIM,根据基础数据类型和复合数据类型的语法规则,对PREAMBLE.SIM中的代码进行逐行扫描和分词,构建PREAMBLE.SIM文件的分词集合;
解析主程序文件MAIN.SIM,根据9种语法规则对MAIN.SIM中的代码进行逐行扫描和分词,构建MAIN.SIM文件的分词集合;
判断主程序是否调用了其它例程,如果调用了其它例程则继续扫描其它例程,根据9种语法规则对例程文件中的代码进行逐行扫描和分词,构建例程文件的分词集合;例程解析结束后重新回到主程序文件中,直至主程序结束。
3.一种面向SIMSCRIPT语言的抽象语法树构建装置,其特征在于,包括:
语法规则构建模块,用于对SIMSCRIPT语言的语法规则进行抽象和构建;
代码解析模块,用于对SIMSCRIPT代码文件进行扫描和分词;
抽象语法树生成模块,用于基于分词结果构建叶子节点,基于语法规则构建叶子节点的逻辑关系,生成抽象语法树;
所述对SIMSCRIPT语言的语法规则进行抽象和构建,是对SIMSCRIPT语言中注释、变量、基础数据类型、复合数据类型、指针、运算符、控制语句、函数、输入输出流共9种语法规则进行构建;
所述9种语法规则中,运算符语法规则包括赋值语句语法规则和表达式计算语法规则,其中:
赋值语句的语法规则为:LET VARIABLE=EXPRESSION;
ADD语句的语法规则为:ADD EXPRESSION TO VARIABLE;
SUBTARCT语句的语法规则为:SUBTARCT EXPRESSION FROM VARIABLE;
表达式计算的语法规则为:VARIABLE+|-|*|/|**VARIABLE;
其中VARIABLE代表变量,EXPRESSION代表表达式;
所述9种语法规则中,控制语句的语法规则包括:
分支结构语句语法规则:
IF-ALWAYS:‘IF’EXPR STATEMENT*‘ALWAYS’;
IF-ELSE-ALWAYS:‘IF’EXPR STATEMENT*‘ELSE’STATEMENT*‘ALWAYS’;
其中EXPR代表IF语句判断条件的逻辑表达式,STATEMENT代表任意SIMSCRIPT语句;
循环结构语句语法规则:
FOR-DO-LOOP:‘FOR’ID‘=’EXPR‘TO’EXPR‘DO’STATEMENT*‘LOOP’;
UNTIL-DO-LOOP:‘UNTIL’EXPR‘DO’STATEMENT*‘LOOP’;
WHILE-DO-LOOP:‘WHILE’EXPR‘DO’STATEMENT*‘LOOP’;
其中ID代表变量名称,EXPR代表数值计算表达式,STATEMENT代表任意SIMSCRIPT语句,FOR-DO-LOOP语句的控制条件以ID‘=’EXPR‘TO’EXPR规则来表示,UNTIL-DO-LOOP语句和while语句的控制条件以EXPR来表示;
所述对SIMSCRIPT代码文件进行扫描和分词,是对声明文件、主程序文件和例程文件共三类文件进行扫描和分词;
采用以下步骤生成抽象语法树:
加载三类文件的分词结果;
重新扫描三类文件,对文件中的代码做分块处理,基于SIMSCRIPT语法规则对各个代码块中包含的分词做语法分析;如果代码块中包含表达式语句,创建EXPR作为该代码块的节点,并对该代码块中包含的表达式继续做语法分析;如果代码块中包含赋值或控制语句,创建STATEMENT作为该代码块的节点,并对该代码块中包含的赋值或控制语句继续做语法分析;如果代码块不包含以上两种语句,直接以代码块中的分词结果创建节点;
按照分词在代码中的出现顺序,将同一层的节点从左到右排列。
4.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器存储计算机程序,所述计算机程序被配置为由所述处理器执行,所述计算机程序包括用于执行权利要求1或2所述方法的指令。
5.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机程序,所述计算机程序被计算机执行时,实现权利要求1或2所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310980317.5A CN117193781B (zh) | 2023-08-04 | 2023-08-04 | 一种面向simscript语言的抽象语法树构建方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310980317.5A CN117193781B (zh) | 2023-08-04 | 2023-08-04 | 一种面向simscript语言的抽象语法树构建方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117193781A CN117193781A (zh) | 2023-12-08 |
CN117193781B true CN117193781B (zh) | 2024-04-30 |
Family
ID=89002498
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310980317.5A Active CN117193781B (zh) | 2023-08-04 | 2023-08-04 | 一种面向simscript语言的抽象语法树构建方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117193781B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120107032A (ko) * | 2011-03-18 | 2012-09-28 | (주)지앤씨인터렉티브 | 플렛폼 독립적 소스 코드 번역기 |
CN111880784A (zh) * | 2020-08-06 | 2020-11-03 | 中国人民解放军国防大学联合作战学院 | 一种面向simscript语言的离散事件仿真图形化建模方法 |
CN116301755A (zh) * | 2023-03-23 | 2023-06-23 | 同济大学 | 一种基于有向计算图的自动化批流数据打标框架构建方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9239710B2 (en) * | 2013-03-15 | 2016-01-19 | ArtinSoft Corporation | Programming language transformations with abstract syntax tree extensions |
-
2023
- 2023-08-04 CN CN202310980317.5A patent/CN117193781B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120107032A (ko) * | 2011-03-18 | 2012-09-28 | (주)지앤씨인터렉티브 | 플렛폼 독립적 소스 코드 번역기 |
CN111880784A (zh) * | 2020-08-06 | 2020-11-03 | 中国人民解放军国防大学联合作战学院 | 一种面向simscript语言的离散事件仿真图形化建模方法 |
CN116301755A (zh) * | 2023-03-23 | 2023-06-23 | 同济大学 | 一种基于有向计算图的自动化批流数据打标框架构建方法 |
Non-Patent Citations (3)
Title |
---|
development and the deployment of cosage 2.0;nathan dietrich;《IEEE proceedings of the 2011 winter simulation conference》;20111231;第2445-2452页 * |
一种离散事件建模仿真语音系统研究;迟鹏;《软件仿真学报》;20150930;第27卷(第9期);第2015-2024页 * |
可信系统性质的分类和形式化研究综述;詹博华 等;《软件学报》;20220731;第33卷(第7期);第2367-2410页 * |
Also Published As
Publication number | Publication date |
---|---|
CN117193781A (zh) | 2023-12-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7937688B2 (en) | System and method for context-sensitive help in a design environment | |
Feijs et al. | Formal specification and design | |
EP0525258A1 (en) | Generation of rules-based computer programs | |
KR101213890B1 (ko) | 강한 데이터 유형을 이용하여 소프트웨어 프로그램에서음성 인식 문법을 나타내기 위한 방법 | |
CN115061721A (zh) | 一种报表生成方法、装置、计算机设备及存储介质 | |
CN112667563A (zh) | 一种文档管理及操作方法和系统 | |
Aiken et al. | A toolkit for constructing type-and constraint-based program analyses | |
US8091069B2 (en) | Module specification language and meta-module | |
CN108153522B (zh) | 基于模型转换由midcore生成Spark和Hadoop程序代码的方法 | |
CN114816420A (zh) | 一种数据处理方法和装置 | |
Aoyama et al. | Design specification in Japan: Tree-structured charts | |
CN111475196A (zh) | 编译告警溯源方法、装置、电子设备及计算机可读介质 | |
CN114816356A (zh) | 基于接口文档生成http请求代码的系统及方法 | |
Koskimies et al. | The design of a language processor generator | |
CN117193781B (zh) | 一种面向simscript语言的抽象语法树构建方法和装置 | |
Bonachea et al. | Hancock: A language for processing very large-scale data | |
CN111126008A (zh) | 基于xsd的代码生成方法、装置、计算机设备及存储介质 | |
CN113190573A (zh) | 一种基于类sql的数据文件分析处理方法、装置及电子设备 | |
CN117193782B (zh) | 一种从simscript语言到c语言的语法映射方法和装置 | |
CN113641745B (zh) | 跨语言平台操作数据库的方法 | |
Xiao | Transformation System of two Similar Syntax Programs Based on the Compiler Principle | |
CN112836477B (zh) | 代码注释文档的生成方法、装置、电子设备及存储介质 | |
Ramalho et al. | Algebraic specification of documents | |
CN114942766A (zh) | 基于SQL数据库的Excel函数转换方法及相关装置 | |
Šťastný | Command-line tool lsql-csv for CSV files processing |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |