【ACCESS精品源码栏目提醒】:网学会员--在 ACCESS精品源码编辑为广大网友搜集整理了:基于ALI的ADA语言静态分析器的研究与实现 - 培训资料绩等信息,祝愿广大网友取得需要的信息,参考学习。
专 业 推 荐 ↓ 精 品 文 档 本栏目责任编辑谢媛媛软件设计开发ComputerKnowledgeAndTechnology电脑知识与技术2008年第4卷第6期总第33期基于ALI的AD语言静态分析器的研究与实现朱烨朱宏明同济大学软件学院上海航天-同济大学航天嵌入式计算机技术实验室上海201804摘要Ada语言源代码经编译器编译后生成一个后缀名为Ali的文本文件。
该li文件中包含了丰富的有关da源代码的信息。
该文剖析了由M1750da编译器编译生成的li文件内包含的具体信息内容并介绍了基于li文件的分析并结合Lex词法分析工具来实现D语言静态分析器的过程。
关键词li文件d语言Lex静态分析器中图分类号TP311文献标识码A文章编号1009-3044200833-1406-05ResearchandImplementationofAdaLanguageStaticAnalyzerBasedonALIZHUYeZHUHong-mingSST-TongjiSpceflightEmbeddedComputingLabSchoolofSoftwrengineeringongjiniversityShnghi201804ChinAbstract:dlngugesourcecodecngenertefilesuffixedbyli.helifilecontinsmuchinformtionboutAdsourcecode.hispperdissectsthedetilinformtionofAlifilegenertedby50AdcompilerndthenintroducestheprocessofimplementingtheAAlngugestticnlyzerbsedonnlysisoflifilendtheexlexiclnlysistool.Keywords:lifiledlngugelexstticnlyzer1引言Ada是一种表现能力很强的通用程序设计语言它是美国国防部为克服软件开发危机耗费巨资历时近2年研制成功的是美国国防部指定的唯一一种可用于军用系统开发的语言我国军方也将其做为军内开发标准。
Ada是一种实时语言除了包括一组完整的通常的语言特征之外还提供了多任务、同步实时处理以及为低级硬件设备直接进行程序设计的功能。
因此在工业控制、通讯和军事系统这些常用的实时领域得到广泛应用。
Ada语言应用的领域要求它的编译系统必须非常高效而且准确可靠。
M175Ada是由xgc公司受欧洲太空局委托开发的一个商用的遵循GNU公共授权的开源软件是一套基于GCC-175开发的、能生成可靠运行的目标码的面向MILSTD-175A体系结构的Ada编译器。
该编译器目前在航空航天领域广泛应用。
M175Ada对Ada源代码进行编译后会产生一个扩展名为ali的文件。
该文件中包含了详细的有关源代码的信息基于对其的分析可以编写出Ada语言的静态分析器。
本文将剖析Ali文件的结构和内容分析其包含的有用信息并介绍如何利用这些有用信息来编写Ada语言的静态分析器最后能够得到Ada的程序结构图。
2Ali文件的生成图d源代码的编译过程Ali文件是Ada编译器编译Ada源代码时生成的中间文件Ali的全称为Adalibraryinformationfile.Ada源代码的编译可由一条gnatmake命令来完成gnatmakefilenameadb也可不加扩展名.adb此命令的执行过程如图1所示实际是由三个独立的命令组成1gcccfilenameadbAda源代码经GCC编译后生成一个扩展名为o的目标文件以及扩展名为ali的文本文件。
2gnatbindfilenameali此绑定命令的结果是生成两个临时工作文件bfilenameadb和bfilenameabs。
3gnatlinkfilenameali经链接器链接后最终生成一个可执行程序。
因此最后得到的文件有Ada源代码文件adb.ads目标文件.oAli文件以及可执行程序。
3Ada的程序结构一个Ada程序或Ada系统由一个或多个程序单元组成每个程序单元可以分别编译。
程序单元的内部还可以嵌套多个程序收稿日期2008-09-0作者简介朱烨983-女江苏常州人同济大学软件学院软件工程专业硕士主要研究方向嵌入式系统朱宏明980-男同济大学软件学院讲师主要研究方向数据挖掘软件工程。
ISSN1009-3044CoputerKnowledgeAndTechnology电脑知识与技术Vol.4No.6November2008pp.14061410Email:xsjlcccc.net.cnhttp://www.dnzsnetcnTel:8655软件设计开发本栏目责任编辑谢媛媛单元。
一个程序单元可以是以下四种类型1子程序procedure或function表达了单独的动作2程序包package计算资源的集合3任务task逻辑上与其他任务并发执行的动作4类属generic用于不同数据类型上的通用算法样板化每个Ada程序都有一个主程序它可以调用其他编译单元的服务程序每个程序单元分成两大部分1规格说明即声明定义了与外部界面的接口部分2体包含了程序单元的实现细节简单的程序实例howdy.ads的内容如下所示程序包Howdy的规格说明packageHowdyisprocedureHelloprocedureGoodbyeendHowdyhowdy.adb的内容如下所示程序包Howdy的体withText_IOuseText_IOpackagebodyHowdyisprocedureHelloisbeginPut_Line“Howdyfrompackage”EndHelloprocedureGoodbyeisbeginPut_LineGoodbyefrompackageEndGoodbyeEndHowdyhowdymain.adb的内容如下所示过程HowdymainWithHowdyprocedureHowdyMainisbeginHowdy.helloHowdy.goodbyeEndHodyMain4Ali文件内包含的信息上节简单介绍了Ada的程序结构并举了一个简单是程序实例此例的源代码经gnatmakehowdymain命令编译的过程如图2所示图2Ada程序实例编译过程编译后得到两个Ali文件howdymain.ali和howdy.alihowdymain.ali文件的内容如图3所示图3howdymain.ali的内容4.1Ali文件内包含的信息每个ALI文件包括以下信息1版本信息指明编译本单元的GNAT版本2主程序信息包括优先级、时间片设置和编译期间使用的宽字符解码3gcc编译本单元使用的选项列表朱烨等基于ALI的ADA语言静态分析器的研究与实现14072012-05-162012-05-162012-05-162012-05-162012-05-162012-05-16本栏目责任编辑谢媛媛软件设计开发ComputerKnowledgeAndTechnology电脑知识与技术2008年第4卷第6期总第33期4本单元的属性包括pragmas设置、编译是否成功、使用的异常模式等5应用在本单元的相关约束检查列表6分类信息7with的单元8使用在本单元的链接器的选项的编译指示9本单元的版本属性10依赖信息它是一个文件列表包括时间戳和校验信息交互引用信息。
在众多信息中最为复杂且对我们最为重要的信息就是交互引用信息也就是图3中的如下部分Xhowdy.adsK9Howdy4e02r64r55r52U5Hello24r3U5Goodbye25rX2howdymainadb2UHowdyMain6l56t4这部分交互引用信息就是编写Ada静态分析器的关键有用的信息。
4.2Ali文件信息内容说明HeaderXdependency-numberfilename根据依赖文件列表为每一个源文件进行编号。
Entitylinetypecollevelentityrenamereftyperefrefsline表示行号2col表示列号3type表示实体所属的类型由单个字母表示区分大小写具体含义如表所列4level表示可见性如果为号则表明该实体对外部是可见的即外部可以引用它如果为空格则反之即对外部不可见5entity表示实体名字6renameref表示重命名引用如果实体在别处被重命名为简单的标识符或者扩展的名字则renameref有如下的形式line:col这里line:col表示实体的标识符即名字在其被重命名处出现的行号和列号此处不需要文件号因为重命名只能在同一个文件中进行如果被重命名为一个复杂的表达式则renameref这一项是被省略的7typeref表示实体被引用的方式具体含义如表2所列8refs表示该实体的详细说明其格式为file’’linetypecolfile为文件的数字代号如果所在文件为交互引用节开头即header的文件则“file”省略linecol表示行号和列号type表示类型具体含义如表3所列4.3举例说明例如howdymainali文件中有如下两列交互信息XhowdyadsK9Howdy4e02r64r55r5其含义
上一篇:
指纹识别系统目录
下一篇:
一个人晕着也能去看病打针