CN102880468B - 一种用于ecu程序开发的代码智能提示方法及其系统 - Google Patents
一种用于ecu程序开发的代码智能提示方法及其系统 Download PDFInfo
- Publication number
- CN102880468B CN102880468B CN201210335451.1A CN201210335451A CN102880468B CN 102880468 B CN102880468 B CN 102880468B CN 201210335451 A CN201210335451 A CN 201210335451A CN 102880468 B CN102880468 B CN 102880468B
- Authority
- CN
- China
- Prior art keywords
- variable
- definition
- current
- symbol table
- code
- 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
Abstract
本发明公开了一种用于ECU程序开发的代码智能提示方法:首先,获取当前用户输入的程序信息;然后,对程序信息进行解析并提取出定义信息,并将定义信息填充到符号表中;最后,通过查找符号表对C代码源文件中当前编辑行已输入的变量进行分析,进而根据分析结果确定是否提示给出C代码源文件中当前编辑行最后一变量在符号表中所包含的成员。本发明还公开了一种用于ECU程序开发的代码智能提示系统,包括XML解析器、ANTLR开源语法分析器、符号表、查表分析模块和智能提示模块。本发明能够在用户编写ECU程序代码过程中,智能提示相关代码,提高程序开发的效率。
Description
技术领域
本发明属于汽车控制程序开发技术领域,具体涉及一种用于ECU程序开发的代码智能提示方法及其系统。
背景技术
ECU(Electronic Control Unit,电子控制单元)又称车载电脑。从用途上讲则是汽车专用微机控制器,也叫汽车专用单片机。它和普通的单片机一样,由CPU、ROM、RAM、I/O接口、模数转换器以及整形、驱动等大规模集成电路组成。ECU的功用是根据其内存的程序和数据对空气流量计及各种传感器输入的信息进行运算、处理、判断,然后输出指令,向喷油器提供一定宽度的电脉冲信号以控制喷油量;故要实现上述功能需对ECU进行程序开发编写。
C语言是ECU开发最主要的开发语言,市场上C语言的开发环境也有许多,例如CodeWarrior、Keil、IAR Embedded Workbench等,但是这些开发环境都没有一个比较好的代码提示功能。如今社会竞争激烈,人力资源日益昂贵,如何提高开发效率成为许多公司关注的焦点。用过微软Visual Studio的开发者都对其代码提示和补全功能感到惊叹,Eclipse虽然比不上Visual Studio,但其对Java的智能提示也还算不错。
手写代码有着效率低,出错率高的问题,传统的ECU开发环境中没有针对头文件和源文件中定义的类型和变量进行解析,代码中的每个变量都需要输入完整的名称,并且名称的检查也是在编译的时候进行,编译器发现并报告了哪行的错误之后才进行改正,这样开发效率低下。并且ECU开发中许多代码属于配置性的还有一些代码是用于定义协议报文格式,这类代码结构上往往比较规整并且具有重复性,手动编写的过程中往往带有大量的复制-粘贴操作,这其中可能就留下许多隐患。
C语言和JAVA、C#存在区别,C语言是直接操作内存的语言,而不是建立在虚拟机之上的语言,这就导致虚拟机语言上那套通过反射获得定义信息的做法走不通,造成智能代码提示的实现遇到困难。但好在C语言功能上比较简单,不含有面向对象那一套功能,智能代码提示最主要的目标就是解析结构体的定义。
发明内容
针对现有技术所存在的上述技术缺陷,本发明提供了一种用于ECU程序开发的代码智能提示方法及其系统,能够在用户编写ECU程序代码过程中,智能提示相关代码,提高程序开发的效率。
一种用于ECU程序开发的代码智能提示方法,包括如下步骤:
(1)获取当前用户输入的程序信息;所述的程序信息包括CAN网络(控制器局域网络)数据库、C代码(C语言代码)源文件及其所引用的头文件;
(2)对所述的程序信息进行分析并提取出定义信息,并将所述的定义信息填充到符号表中;jhdjsajka
(3)通过查找所述的符号表对C代码源文件中当前编辑行已输入的变量进行分析,进而根据分析结果确定是否提示给出C代码源文件中当前编辑行最后一变量在符号表中对应结构体所包含的成员。
所述的步骤(2)中,对程序信息进行分析并提取出变量定义信息的过程如下:
a.利用XML解析器对CAN网络数据库进行解析,得到CAN网络数据库内各变量的定义和各结构体的定义;
b.利用ANTLR开源语法分析器对C代码源文件所引用的每个头文件进行分析,得到一棵语法树;
c.自上而下遍历所述的语法树,从中提取每个头文件内各变量的定义和各结构体的定义;
d.根据步骤b和c,对C代码源文件进行同样操作,得到C代码源文件内各变量的定义和各结构体的定义。
变量的定义记录了变量所对应的结构体,结构体的定义记录了结构体所包含的成员。
所述的步骤(3)中,通过查找符号表对C代码源文件中当前编辑行已输入的变量进行分析的过程如下:
a.首先,查找C代码源文件中当前编辑行第一个变量是否在符号表中存在定义:若存在,则执行步骤b;若不存在,则表示当前编辑行无需自动提示;
b.判断存在定义的当前变量的下一变量是否为空:若是,则表示当前编辑行需自动提示;若否,则执行步骤c;
c.从符号表中读取当前变量对应的结构体所包含的成员,判断当前变量的下一变量是否为当前变量的成员:
若是,则查找下一变量是否在符号表中存在定义:若存在,则将下一变量作为存在定义的当前变量,并返回步骤b;若不存在,则表示当前编辑行无需自动提示;
若否,则表示当前编辑行无需自动提示。
一种用于ECU程序开发的代码智能提示系统,包括:
XML解析器,用于对CAN网络数据库进行解析,得到CAN网络数据库内各变量的定义和各结构体的定义;
ANTLR开源语法分析器,用于对C代码源文件及其所引用的每个头文件进行分析,提取C代码源文件内各变量的定义和各结构体的定义以及每个头文件内各变量的定义和各结构体的定义;
符号表,用于存放XML解析器和ANTLR开源语法分析器所提取得到的定义信息;
查表分析模块,用于通过查找符号表对C代码源文件中当前编辑行已输入的变量进行分析,并输出分析结果;
智能提示模块,用于根据分析结果确定是否提示给出C代码源文件中当前编辑行最后一变量在符号表中所包含的成员。
本发明解决在ECU开发中智能提示不足,开发效率低的问题,主要包括智能提示和代码生成。智能提示基于对现有CAN网络数据库文件和已有代码的分析,验证当前编辑行是否符合语法规则,对于符合语法规则的结合上下文环境给出智能提示,帮助开发人员快速开发,避免由复制、粘贴带来的潜在错误。
附图说明
图1为本发明代码智能提示方法的步骤流程图。
图2为符号表的构建示意图。
图3为本发明代码智能提示系统的结构示意图。
具体实施方式
为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明方法及其系统进行详细说明。
如图1所示,一种用于ECU程序开发的代码智能提示方法,包括如下步骤:
(1)获取当前用户输入的程序信息;
程序信息包括CAN网络数据库、C代码源文件及其所引用的头文件;
CAN网络数据库是由整车厂商提供的一个描述CAN网络上各ECU通讯所定义的协议,其中包含信息Message和信号Signal,在C语言的实现上每一个Signal定义成一种基本数据类型,而每一个Message定义成一个结构体,结构体中又包含了若干个Signal。
(2)如图2所示,对程序信息进行分析并提取出定义信息:
1.利用XML解析器对CAN网络数据库进行解析,得到CAN网络数据库内各变量的定义和各结构体的定义;
2.利用ANTLR开源语法分析器对C代码源文件所引用的每个头文件进行分析,根据C语言的文法,对于每一个非终结符都建立一个类来存储该节点的信息,在ANTLR分析的过程中,通过建立一个个非终结符对应的类对象,并且由节点的引用关系构建这些对象间的引用关系,最终得到一棵对象描述的语法树;
3.根据已经得到的语法树,采用自上而下深度优先的遍历算法,遍历语法树中的每一个节点,从中提取每个头文件内各变量的定义和各结构体的定义;
4.根据步骤2和3,对C代码源文件进行同样操作,得到C代码源文件内各变量的定义和各结构体的定义。
最后,并将定义信息填充到符号表中;由于C语言包含各种作用域,因此每一个作用域都包含一个对应的变量定义的符号表,其中主要包括全局符号表,而每一个函数都有其对应的局部符号表。
(3)通过查找符号表对C代码源文件中当前编辑行已输入的变量进行分析:
1.首先,查找C代码源文件中当前编辑行第一个变量是否在符号表中存在定义:若存在,则执行步骤2;若不存在,则表示当前编辑行无需自动提示;
如前面所述,对于变量的定义包含了全局符号表,并且每一个函数都有局部的符号表,因此查找当前变量的时候,首先到当前函数对应的符号表中查找,若查到,将查找结果返回,查找结束;若未查到,再到全局符号表中查找,若查到,将查找结果返回,若未查到,则当前变量不存在定义,错误返回;
2.判断存在定义的当前变量的下一变量是否为空:若是,则表示当前编辑行需自动提示;若否,则执行步骤3;
3.从符号表中读取当前变量对应的结构体所包含的成员,判断当前变量的下一变量是否为当前变量的成员:
若是,则查找下一变量是否在符号表中存在定义:若存在,则将下一变量作为存在定义的当前变量,并返回步骤2;若不存在,则表示当前编辑行无需自动提示;
若否,则表示当前编辑行无需自动提示。
根据分析结果确定是否提示给出C代码源文件中当前编辑行最后一变量在符号表中对应结构体所包含的成员。提示的过程中除了要匹配变量的名称,还要匹配变量的类型:对于基本数据类型的变量和指向它们的指针,则不需要提示;对于结构体变量在遇到“.”的时候提示其结构体成员,而对于指针变量在遇到“->”的时候提示其结构体成员,而对于“a->”,除了要找到是否存在变量a的定义,还要查看变量a是否是定义为指针,只有变量名称和类型完全匹配的,才算匹配成功,继续匹配下一个变量,否则都错误返回。
下面结合一个例子来说明查询提示过程。假设源代码定义如下:
下面分析d,d.ptoxx->、d.ptoxx->a.的解析过程:
遇到d时候查询,查询符号表,发现d的类型是yy,并且d已经是最后一个词,这时候给出yy的成员提示ptoxx和c。
遇到d.ptoxx,首先拿d查符号表,知道d是yy类型,分析第二个词是ptoxx,而d的成员中确实有个叫ptoxx的,匹配,继续查询ptoxx的类型定义是struct xx,因为已经是最后一个单词,并且ptoxx之后是->而ptoxx正好是指针类型所以给出struct xx的成员a和b。
遇到d.ptoxx->a,到d.ptoxx->的解析过程如上一步,之后遇到a,发现ptoxx确实有成员名叫a,后面是一个.,但是a是基本类型int,不是结构体,因此没有成员,返回空。
如图3所示,一种用于ECU程序开发的代码智能提示系统,包括:XML解析器、ANTLR开源语法分析器、符号表、查表分析模块和智能提示模块;其中:
XML解析器用于对CAN网络数据库进行解析,得到CAN网络数据库内各变量的定义和各结构体的定义;
ANTLR开源语法分析器用于对C代码源文件及其所引用的每个头文件进行分析,提取C代码源文件内各变量的定义和各结构体的定义以及每个头文件内各变量的定义和各结构体的定义;
符号表用于存放XML解析器和ANTLR开源语法分析器所提取得到的定义信息;
查表分析模块用于通过查找符号表对C代码源文件中当前编辑行已输入的变量进行分析,并输出分析结果;
智能提示模块用于根据分析结果确定是否提示给出C代码源文件中当前编辑行最后一变量在符号表中所包含的成员。
xML解析器、ANTLR开源语法分析器、查表分析模块和智能提示模块均通过计算机编程实现。
Claims (1)
1.一种用于ECU程序开发的代码智能提示方法,包括如下步骤:
(1)获取当前用户输入的程序信息;所述的程序信息包括CAN网络数据库、C代码源文件及其所引用的头文件;
(2)对所述的程序信息进行分析并提取出定义信息,并将所述的定义信息填充到符号表中;提取定义信息的过程如下:
A1.利用XML解析器对CAN网络数据库进行解析,得到CAN网络数据库内各变量的定义和各结构体的定义;
A2.利用ANTLR开源语法分析器对C代码源文件所引用的每个头文件进行分析,得到一棵语法树;
A3.自上而下遍历所述的语法树,从中提取每个头文件内各变量的定义和各结构体的定义;
A4.根据步骤A2和A3,对C代码源文件进行同样操作,得到C代码源文件内各变量的定义和各结构体的定义;
(3)通过查找所述的符号表对C代码源文件中当前编辑行已输入的变量进行分析,进而根据分析结果确定是否提示给出C代码源文件中当前编辑行最后一变量在符号表中对应结构体所包含的成员;
对C代码源文件中当前编辑行已输入的变量进行分析的过程如下:
B1.首先,查找C代码源文件中当前编辑行第一个变量是否在符号表中存在定义:若存在,则执行步骤B2;若不存在,则表示当前编辑行无需自动提示;
B2.判断存在定义的当前变量的下一变量是否为空:若是,则表示当前编辑行需自动提示;若否,则执行步骤B3;
B3.从符号表中读取当前变量对应的结构体所包含的成员,判断当前变量的下一变量是否为当前变量的成员:
若是,则查找下一变量是否在符号表中存在定义:若存在,则将下一变量作为存在定义的当前变量,并返回步骤B2;若不存在,则表示当前编辑行无需自动提示;
若否,则表示当前编辑行无需自动提示。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210335451.1A CN102880468B (zh) | 2012-09-12 | 2012-09-12 | 一种用于ecu程序开发的代码智能提示方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210335451.1A CN102880468B (zh) | 2012-09-12 | 2012-09-12 | 一种用于ecu程序开发的代码智能提示方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102880468A CN102880468A (zh) | 2013-01-16 |
CN102880468B true CN102880468B (zh) | 2015-07-08 |
Family
ID=47481807
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210335451.1A Active CN102880468B (zh) | 2012-09-12 | 2012-09-12 | 一种用于ecu程序开发的代码智能提示方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102880468B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103970776B (zh) * | 2013-01-30 | 2017-06-16 | 广州汽车集团股份有限公司 | 一种创建can分层树的方法和系统 |
CN104281604B (zh) * | 2013-07-05 | 2017-04-19 | 广州汽车集团股份有限公司 | 生成Targetlink数据字典分层树的方法和系统 |
CN104281096B (zh) * | 2013-07-08 | 2017-10-13 | 广州中国科学院先进技术研究所 | 数控代码编译器的构造方法 |
CN104424194B (zh) * | 2013-08-20 | 2017-10-03 | 广州汽车集团股份有限公司 | CANdb网络文件异同的比较方法及其系统 |
CN104461548B (zh) * | 2014-12-15 | 2018-02-02 | 北京国双科技有限公司 | 代码片段的添加方法和装置 |
CN107239264B (zh) * | 2016-03-28 | 2020-06-23 | 阿里巴巴集团控股有限公司 | 代码提示信息的生成方法及装置 |
US10203416B2 (en) * | 2016-05-18 | 2019-02-12 | The Boeing Company | Power adjustment for code signals |
CN107247582A (zh) * | 2017-04-14 | 2017-10-13 | 惠州市蓝微新源技术有限公司 | 一种自动生成can发送和接收代码的方法 |
CN110502227B (zh) * | 2019-08-28 | 2023-07-14 | 网易(杭州)网络有限公司 | 代码补全的方法及装置、存储介质、电子设备 |
CN111158663B (zh) * | 2019-12-26 | 2021-07-02 | 深圳逻辑汇科技有限公司 | 用于处理程序代码中的变量的引用的方法和系统 |
CN112328256B (zh) * | 2020-11-19 | 2023-04-25 | 四川创智联恒科技有限公司 | 一种自动生成结构体解析器源代码的方法 |
CN112328232A (zh) * | 2020-11-26 | 2021-02-05 | 杭州安恒信息安全技术有限公司 | 一种代码提示方法及相关装置 |
CN112817583B (zh) * | 2021-04-19 | 2022-02-01 | 阿里云计算有限公司 | 一种代码编辑方法、装置、服务端、用户设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256532A (zh) * | 2008-04-07 | 2008-09-03 | 中兴通讯股份有限公司 | 一种嵌入式系统中变量实时查看的方法 |
CN102236551A (zh) * | 2010-04-30 | 2011-11-09 | 微软公司 | 软件开发工具 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3964259B2 (ja) * | 2002-05-10 | 2007-08-22 | 富士通株式会社 | プログラム生成装置、及びプログラム生成方法、並びにプログラム生成用プログラム |
-
2012
- 2012-09-12 CN CN201210335451.1A patent/CN102880468B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101256532A (zh) * | 2008-04-07 | 2008-09-03 | 中兴通讯股份有限公司 | 一种嵌入式系统中变量实时查看的方法 |
CN102236551A (zh) * | 2010-04-30 | 2011-11-09 | 微软公司 | 软件开发工具 |
Non-Patent Citations (2)
Title |
---|
C语言的结构编辑器;卢慧琼等;《计算机研究与发展》;19860731;第23卷(第7期);第22-31页 * |
基于ANTLR的Gaussian词法分析器和语法分析器的分析与设计;刘三献;《中国优秀硕士学位论文全文数据库 信息科技辑》;20091215(第12期);第I138-1026页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102880468A (zh) | 2013-01-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102880468B (zh) | 一种用于ecu程序开发的代码智能提示方法及其系统 | |
CN112100054B (zh) | 一种面向数据管控的程序静态分析方法和系统 | |
EP3745256A1 (en) | External code integrations within a computing environment | |
CN103197948B (zh) | 一种电力智能设备通信规约脚本解析方法 | |
CN104503816A (zh) | 一种硬件语言vhdl到msvl的自动转换系统 | |
CN108694214A (zh) | 数据报表的生成方法、生成装置、可读介质及电子设备 | |
CN103593335A (zh) | 基于本体一致性验证推理的中文语义校对方法 | |
CN103605660A (zh) | 一种变电站配置描述文件的图形化处理方法 | |
CN113778449B (zh) | 航空电子接口数据适配转换系统 | |
CN101739258A (zh) | Aadl模型的自动代码生成方法 | |
CN110222318A (zh) | 基于xml的数据生成工具开发方法 | |
CN111581920A (zh) | 文档转换方法、装置、设备及计算机存储介质 | |
CN108279885A (zh) | 一种对多个模型代码进行软件集成的方法及装置 | |
CN110502227A (zh) | 代码补全的方法及装置、存储介质、电子设备 | |
CN108766507B (zh) | 一种基于CQL与标准信息模型openEHR的临床质量指标计算方法 | |
CN110209389A (zh) | 一种基于xml的数据生成工具开发系统 | |
CN110196720A (zh) | 一种Simulink生成动态链接库的优化方法 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
CN102520963B (zh) | 基于强类型关系映射实现业务逻辑处理的方法及系统 | |
CN101499015A (zh) | 一种高级语言转换成其它高级语言的方法及转换器 | |
US11593076B2 (en) | Method for merging architecture data | |
CN109325217B (zh) | 一种文件转换方法、系统、装置及计算机可读存储介质 | |
CN103559296A (zh) | 一种基于xml的scpi命令解析方法 | |
CN105302547A (zh) | 一种面向Verilog HDL设计的故障注入方法 | |
CN102354318B (zh) | 减少数据库系统中即席查询语句的装置和方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
EE01 | Entry into force of recordation of patent licensing contract |
Application publication date: 20130116 Assignee: Hangzhou Suma Technology Co., Ltd. Assignor: Zhejiang University Contract record no.: 2017330000040 Denomination of invention: Code intelligent prompting method and system for electronic control unit (ECU) program development Granted publication date: 20150708 License type: Exclusive License Record date: 20170406 |
|
EE01 | Entry into force of recordation of patent licensing contract |