嵌入式OSEK配置器的设计与实现

时间:2012-11-16来源:网络


3.4.1 利用ALEX和AYAGO构造解析器

Parser Generator是Windows环境下使用LEX和YACC语言开发编译器的集成开发工具,包含了编译程序构造工具ALEX和AYACC。ALEX和AYACC不仅可将LEX和YACC源程序转换成C语言词法和语法分析程序,还可以根据用户需要产生C++和Java代码的词法和语法分析程序。

OIL语言解析器的解析过程包括词法分析、语法分析、错误处理和目标代码的生成。首先根据OIL文件规范中的对象和属性值、语法规则编写LEX和YACC源文件,通过ALEX和AYACC自动生成以C++语言为代码的词法分析类OilLexer和语法分析类OilParser,并且重载和添加一砦类成员函数;然后将这两个类加入到VC工程中,实现程序的错误处理和自动代码生成部分,从而开发出OIL语言解析器。整个解析器设计原理如图5所示。


3.4.2 词法分析类和语法分析类的设计

在词法分析阶段,扫描程序将OIL文件中的字符序列分解,去掉空格、换行等自字符,并把识别出来的各个单词符号收集到记号(token)单元中。若在分析过程中发现词法错误,则转入错误处理程序。ALEX的输入规则文档Lexer.l包括以下3部分:

声明部分。包含所需的头文件及词法分析类的定义。

◆规则部分。定义正则表达式和OIL对象的关键字,然后添加对相应模式处理的C++语言源代码,最后将token送给语法分析类OiiParser。例如:


◆程序部分。设计OIL扫描器时无需其他额外功能,因此为空。

在语法分析阶段,语法分析程序从词法分析类中获取记号形式的源代码,并完成定义OIL语言结构的语法分析。AYACC输入规格文档Parser.y也包括3部分:声明部分、规则部分和程序部分。在声明部分,包含OilParser类所需的头文件以及声明从词法分析器返回的token记号。规则部分分析OIL文件的语法规则。OIL文件的语法遵循Backus-Naur范式(BNF),对于每个OIL对象属性的定义,其OIL实现类似于一个C结构定义。一个OIL文件由3个模块组成:版本、执行定义和应用程序定义。用BNF范式可表示为:

执行定义包含了一个OSEK实现的所有属性,这些属性的数据类型和取值范围可能是受限制的。因此在语义规则部分设置错误处理语句,对OIL对象属性的数据类型和取值范围进行检查。ALEX和AYACC的特性,可使错误检测简单、直观地实现,并且很容易和错误处理类集成,这对于从外部读取OIL文件时进行语义判断,保证OSEK配置器的兼容性有着重要的意义。

应用程序定义包含了一系列对象以及这些对象属性的赋值,除了OS、COM和NM对象外,应用程序可以定义多个同一类型的对象。根据应用程序定义规则,完成形式文法规则以及对每条规则进行语义处理的C++语句。在处理语句中,根据GUI部分定义的XMI.模板格式(如图4中的MPC.xml),将得到的对象及其属性值一一对应到XML的树型结构中,从而完成OIL文件转换为XML文件的过程。同样,在处理语句中,根据操作系统中定义的接口将OIL对象及其属性值提取出来,生成符合OSEK实时操作系统的API函数和数据结构,放在C代码和头文件中,从而完成整个代码生成的过程。

4 结论

OSEK配置器的开发是OSEK实时操作系统中的重要组成部分。在开发过程中,利用XML技术方便管理和存储数据的功能,实现了从可视化的GUI生成OIL文件的过程;利用OIL语言解析器的高教性和强大的出错处理功能,实现了GUI从外部读取OIL文件及代码生成的过程,从而保证了OIL文件的可移植性、可扩展性和可重用性。此组件在集成开发环境中运行稳定,这在开发具有自主知识产权的OSEK实时操作系统中具有重要的意义。

1 2 3

关键词: 实现 设计 配置 OSEK 嵌入式

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版