一种基于antlr的lin网络描述文件ldf的导入方法

文档序号:6439571阅读:1942来源:国知局
专利名称:一种基于antlr的lin网络描述文件ldf的导入方法
技术领域
本发明涉及汽车电子软件开发中的网络设计技术,尤其是涉及一种基于ANTLR的 LIN网络描述文件LDF的导入方法。
背景技术
LIN (Local Interconnect Network)是一种低成本的车载内部互联网络,是对现存的车载复杂网络的一个补充。LIN试图通过实现分级的车载网络来进一步的提升性能,同时降低汽车电子中的开发、生成、服务和物流的成本。与CAN (Controller Area Network, 控制器局域网络)总线相比,LIN总线具有比较小的带宽,复杂性也相对比较低。LDF是一种LIN总线的配置信息描述文件。它主要包括LIN总线的如下信息总线版本信息、总线速率定义、通信节点定义、通信节点属性定义、信号定义(还有诊断信号)、信号组定义、帧定义 (还有动态帧、离散帧、事件触发帧和诊断帧),调度表定义等。LDF文件中定义的所有元素都是具有特定的规范的文法的,符合BNF (Backus-Naur Form)巴克斯-诺尔范式。通过LDF 可以有效的进行LIN总线的设计同时定义基于LIN总线的通信簇。开源的语言识别器ANTLR,比起LexAacc,ANTLR提供了一个更强大的语言识别框架。其可以根据用户定义的文法文件,生成多种目标语言(Java、C#、C++、Python等)的词法识别器和文法识别器。同时,ANTLR对语义树的处理、错误报告、错误恢复提供了非常有效的支持。目前汽车电子软件开发中的网络设计过程,一般不会从零开始去进行特定网络的设计。从零开始的网络设计是一个比较复杂的过程。如果能够提供一个高效的,直观的类似DaVinci Network Designer的设计工具,那么一定程度上会提高网络配置的效率。如今通常采用的方法是导入已有的网络模型,进行相关配置来快速建立满足应用需要的网络模型。LDF文件具有较好的可读性。基于这一点,虽然可以直接基于文本字符串来处理 LDF文件从而达到导入的目的。但是,基于文本字符串的处理缺乏准确性,效率比较低,而且比较繁琐,复杂度较高。综上,面对为了充分利用已有网络模型的需求,尤其是为了满足AUT0SAR (汽车开放系统架构,Automotive Open System Architecture)方法论中系统配置阶段进行的网络设计的特殊需求,需要一种正确地高效地导入LDF文件的方法。

发明内容
为了有效利用已有的网络设计的开发成果,克服基于文本字符串的文件导入方式带来的易错、低效以及繁琐的缺点,本发明提供了一种高效的LDF文件导入方法来完成对已有的LIN总线网络模型的有效利用。为了解决上述技术问题,本发明的技术方案如下
一种基于ANTLR的LIN网络描述文件LDF的导入方法,包括如下步骤1)利用LIN总线版本规定的LDF规范的文法,编写符合开源的语言识别器ANTLR规定的文法,组合得到LDF文法文件;
2)通过将步骤1)所述的LDF文法文件导入所述ANTLR中,设置ANTLR中的参数配置, 生成得到LDF文件的词法识别器和语法识别器;
3)通过所述ANTLR生成所述抽象语义树的遍历器,编写遍历抽象语义树的文法文件, 所述遍历器根据编写的遍历抽象语义树的文法文件针对所述LDF文法文件中的元素进行遍历,提取应用需要的信息,并可以按需要定义一定的逻辑;
4)导入LDF文件通过步骤2)所述的词法识别器和语法识别器得到其抽象语义树;
5)通过步骤3)所述的遍历器遍历所述抽象语义树各个节点信息,结合自定义的LDF 元素类模型,去除所述抽象语义树中的冗余信息,完成从抽象语义树到具体内存类模型的转化。进一步的,所述LDF文件包括总线版本信息元素、总线速率定义元素、通信节点定义元素、通信节点属性定义元素、信号定义元素、信号组定义元素、帧定义元素,调度表定义元素并且符合BNF范式。进一步的,所述步骤5)中当遍历所述抽象语义树各个节点信息时当发现并没有遍历结束,则获取非树叶节点信息以及其所有子节点信息,判断子节点是否都是叶子节点,如果不是则继续获取非树叶节点信息以及其所有子节点信息,如果是则合并所有子节点信息并结合自定义的LDF元素类模型,去除所述抽象语义树中的冗余信息,完成从抽象语义树到具体内存类模型的转化。进一步的,所述LDF文件符合LIN2. 0网络标准。本发明具有如下有益效果
1.本发明支持LIN2. 0标准的LDF文件的导入,开源的语言识别器ANTLR,为LDF文件的导入提供了有力的支持,能够可以非常便捷高效的处理LDF文件,避免了基于文本字符串处理的易错繁琐。2.本发明基于ANTLR,其为LDF文件的导入提供了强大的框架支持,可以根据实际的应用需要,在遍历抽象语义树时做自定义的业务逻辑处理,同时也为LDF文件的验证提供了条件,有利于识别出不符合LDF语法规范的文件,甚至可以实现错误的定位。3.本发明支持导入的LIN总线网络模型可以有效的利用已有的开发成果,为进行网络模型的迭代开发,或者进行网络配置、网络分析和诊断提供了基础,同时也为满足 AUT0SAR方法论中系统配置阶段进行的网络设计的特殊需求提供了条件,丰富了 AUT0SAR 的开发方法。


图1本发明的主要流程图2本发明实施例的部分抽象语义树示意图; 图3本发明实施例的部分具体内存类模型示意图。
具体实施例方式下面将结合附图和具体实施例对本发明做进一步的说明。
一种基于ANTLR的LIN网络描述文件LDF的导入方法,包括如下步骤
1)利用LIN总线版本规定的LDF规范的文法,编写符合开源的语言识别器ANTLR规定的文法,组合得到LDF文法文件;
2)通过将步骤1)所述的LDF文法文件导入所述ANTLR中,设置ANTLR中的参数配置, 生成得到LDF文件的词法识别器和语法识别器;
3)通过所述ANTLR生成所述抽象语义树的遍历器,编写遍历抽象语义树的文法文件, 所述遍历器根据编写的遍历抽象语义树的文法文件针对所述LDF文法文件中的元素进行遍历,提取应用需要的信息,并可以按需要定义一定的逻辑;
4)导入LDF文件通过步骤2)所述的词法识别器和语法识别器得到其抽象语义树;
5)通过步骤3)所述的遍历器遍历所述抽象语义树各个节点信息,结合自定义的LDF 元素类模型,去除所述抽象语义树中的冗余信息,完成从抽象语义树到具体内存类模型的转化。本发明的技术构思是LDF文件是一种LIN总线网络配置的保存格式。如果能够充分利用已有网络模型的需求,尤其是为了满足AUT0SAR方法论中系统配置阶段进行的网络设计的特殊需求,那么一种正确地高效地导入LDF文件的方法必然能够有利于快速建立满足应用需要的网络模型,进而会提高网络配置的效率。LDF文件定义了所有的LIN总线元素,并且这些元素的文法是规范的,符合BNF范式。开源的语言识别器ANTLR支持BNF范式的文法,可以生成不同目标语言的词法识别器和语法识别器,并且提供了抽象语义树的处理以及错误报告、错误恢复的有效支持。LDF规范的文法定义,加上ANTLR开源的高效的语言识别器,为LDF文件的导入(识别和转化为内存模型)提供了非常高效的支持。基于ANTLR,导入已有的LIN总线网络模型可以有效的利用已有的开发成果,为进行网络模型的迭代开发,或者进行网络配置、网络分析和诊断提供了基础。图1指出了本发明的主要流程图,具体如下 11)编写LDF文法文件。12)通过ANTLR生成词法识别器和语法识别器。13)通过ANTLR生成抽象语义树遍历器。(13. 1)编写遍历抽象语义树的文法文件。(13.2)基于ANTLR,导入LDF文法文件,最终生成抽象语义树遍历器。14)导入任意一个LDF文件得到其抽象语义树。15)转化为具体的内存类模型。详细的步骤说明如下
步骤1,编写LDF文法文件。LDF文件定义了所有的LIN总线元素,并且这些元素的文法是规范的,符合BNF范式。LDF主要包含的元素如下总线版本信息、总线速率定义、通信节点定义、通信节点属性定义、信号定义(还有诊断信号)、信号组定义、帧定义(还有动态帧、离散帧、事件触发帧和诊断帧),调度表定义等。不同的LIN总线版本(1.3、2.0、2. 1、 J2602_l_l. 0)中元素的定义上有些差别。需要针对各个元素的文法进行编写符合ANTLR规定的文法,最终合成得到整个LDF文件的文法。在本应用案例中,LDF文法是符合LIN2. 0标准。此时得到的LDF文法并不是针对某个LDF文件的文法,因此编写得到的LDF文法文件具有通用性。步骤2,通过ANTLR生成词法识别器和语法识别器。基于开源的语言识别器ANTLR, 导入步骤1编写的LDF文法文件,同时加上一些简单的参数配置language = Java(生成的目标语言是Java)、0utput = AST (识别输出为抽象语义树)等,可以生成得到LDF文件的词法识别器和语法识别器。在本应用案例中,ANTLR采用的版本是ANTLR 3. X0由于LDF文法文件具有通用性,因此通过ANTLR生成的词法识别器和语法识别器也同样具有通用性。完成步骤2之后,此时已经具备识别任意LDF文件的能力。步骤3,通过ANTLR生成抽象语义树遍历器。编写遍历抽象语义树的文法文件,遍历器根据抽象语义树的文法文件针对LDF文法文件中的元素进行遍历,提取应用需要的信息,同时可以定义一定的逻辑。在本应用案例中,抽象语义遍历器的文法是与步骤1中的 LDF文法标准相对应。由于LDF文法文件具有通用性,因此通过ANTLR生成的抽象语义树遍历器也同样具有通用性。完成步骤3之后,此时已经具备导入任意LDF文件的能力。步骤4,导入任意一个LDF文件得到其抽象语义树。LDF文件可以根据LDF的文法进行手工编写。手工编写比较繁琐,工作量比较大,而且易错。目前一般的LDF文件都是利用现有的类似DaVinci Network Designer的设计工具进行网络设计从而生成得到。在本应用案例中,直接使用的是CANoe 7. O提供的LIN demo中的符合LIN2. O标准的一个LDF 文件。图2给出了导入LDF文件得到其对应的抽象语义树中的一些重要元素节点。从图2 中可以发现该LDF符合LIN2. O标准,总线速率是19. 2kbps ;该LIN总线中有一个名为主节点1的master节点,其时间基准是5ms,具有一个0. Ims的抖动;有两个slave节点,名字分别为从节点1,从节点2;此外还有总线中所有的信号信息、帧信息、调度表信息等。同时,也可以发现该抽象语义树存在一定量的无意义信息,比如逗号,分号,括弧等,它们主要用于LDF文法的规范化以及可读性。步骤5,转化为具体的内存类模型。基于步骤3生成的抽象语义树遍历器,结合自定义的LDF元素类模型,可以根据应用需求去除抽象语义树中的冗余信息,具体的如图1右边部分所示,通过ANTLR生成抽象语义树的遍历器,该遍历器遍历抽象语义树各个节点信息时当发现并没有遍历结束,则获取非树叶节点信息以及其所有子节点信息,判断子节点是否都是叶子节点,如果不是则继续获取非树叶节点信息以及其所有子节点信息,如果是则合并所有子节点信息并转化为对应的内存类模型。最终成从抽象语义树到具体内存类模型的转化。在本应用案例中,图3给出了图2中描述的抽象语义树对应的具体内存模型。以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员,在不脱离本发明构思的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明保护范围内。
权利要求
1.一种基于ANTLR的LIN网络描述文件LDF的导入方法,其特征在于,包括如下步骤1)利用LIN总线版本规定的LDF规范的文法,编写符合开源的语言识别器ANTLR规定的文法,组合得到LDF文法文件;2)通过将步骤1)所述的LDF文法文件导入所述ANTLR中,设置ANTLR中的参数配置, 生成得到LDF文件的词法识别器和语法识别器;3)通过所述ANTLR生成所述抽象语义树的遍历器,编写遍历抽象语义树的文法文件, 所述遍历器根据编写的遍历抽象语义树的文法文件针对所述LDF文法文件中的元素进行遍历,提取应用需要的信息,并可以按需要定义一定的逻辑;4)导入LDF文件通过步骤2)所述的词法识别器和语法识别器得到其抽象语义树;5)通过步骤3)所述的遍历器遍历所述抽象语义树各个节点信息,结合自定义的LDF元素类模型,去除所述抽象语义树中的冗余信息,完成从抽象语义树到具体内存类模型的转化。
2.根据权利要求1所述的一种基于ANTLR的LIN网络描述文件LDF的导入方法,其特征在于,所述LDF文件包括总线版本信息元素、总线速率定义元素、通信节点定义元素、通信节点属性定义元素、信号定义元素、信号组定义元素、帧定义元素,调度表定义元素并且符合BNF范式。
3.根据权利要求1所述的一种基于ANTLR的LIN网络描述文件LDF的导入方法,其特征在于,所述步骤5)中当遍历所述抽象语义树各个节点信息时当发现并没有遍历结束,则获取非树叶节点信息以及其所有子节点信息,判断子节点是否都是叶子节点,如果不是则继续获取非树叶节点信息以及其所有子节点信息,如果是则合并所有子节点信息并结合自定义的LDF元素类模型,去除所述抽象语义树中的冗余信息,完成从抽象语义树到具体内存类模型的转化。
4.根据权利要求1所述的一种基于ANTLR的LIN网络描述文件LDF的导入方法,其特征在于,所述LDF文件符合LIN2. 0网络标准。
全文摘要
本发明公开了一种基于ANTLR的LIN网络描述文件LDF的导入方法利用LIN总线版本规定的LDF规范的文法,编写符合开源的语言识别器ANTLR规定的文法,组合得到LDF文法文件并将该文件导入ANTLR中,设置ANTLR中的参数配置,得到LDF文件的词法识别器和语法识别器;通过ANTLR生成抽象语义树的遍历器,编写遍历抽象语义树的文法文件,遍历器根据编写的遍历抽象语义树的文法文件针对LDF文法文件中的元素进行遍历,提取应用需要的信息,并可以按需要定义一定的逻辑;导入LDF文件通过词法识别器和语法识别器得到其抽象语义树;通过遍历器遍历所述抽象语义树各个节点信息,结合自定义的LDF元素类模型,去除抽象语义树中的冗余信息,完成从抽象语义树到具体内存类模型的转化。
文档编号G06F17/30GK102521291SQ20111038694
公开日2012年6月27日 申请日期2011年11月29日 优先权日2011年11月29日
发明者孙征, 李红, 杨国青, 耿莉莉, 赵民德, 钟晓峰 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1