当前位置: 首页 > news >正文

自助建站免费信息发布网站郑州市

自助建站免费信息发布网站,郑州市,安徽省建设工程管理信息网,织梦游戏网站模板Clang可以处理C、C和Objective-C源代码 Clang简介 Clang可能指三种不同的实体#xff1a; 前端#xff08;在Clang库中实现#xff09;编译驱动程序#xff08;在clang命令和Clang驱动程序库中实现#xff09;实际的编译器#xff08;在clang-ccl命令中实现#xff0…Clang可以处理C、C和Objective-C源代码 Clang简介 Clang可能指三种不同的实体 前端在Clang库中实现编译驱动程序在clang命令和Clang驱动程序库中实现实际的编译器在clang-ccl命令中实现 clang -ccl中的编译器不仅是由Clang库实现的而且还广泛使用其他LLVM库来实现编译器的中间部分、后端以及集成的汇编器 先分析clang编译器驱动程序的命令行调用 clang hello.c -o hellloClang驱动程序通过使用-ccl选项来生成另一个自身实例以及调用其内部的编译器 通过在编译器驱动程序中使用-Xclang option 可以将特定的参数传递给该命令 该工具与驱动程序不同并且与GCC命令行的接口区别比较大 Agclang -ccl工具有一个特殊的选项可以打印Clang抽象语法树AST 可以使用以下命令 clang -Xclang -ast-dump hello.c也可以直接调用clang -ccl 而不是驱动程序 clang -cc1 -ast-dump hello.c这里需要指出的是编译驱动程序任务之一是用所有必要的参数来初始化编译器的调用 使用-###标志来驱动程序可以看见他用哪些参数调用clang -ccl编译器 例如如果手动调用clang -ccl 还需要-I标志来提供所有系统的文件头 前端操作 clang -cc1工具的一个特点是它不仅实现了编译器的前端而且还通过LLVM库实例化所有其他的LLVM组件以执行LLVM支持的所有编译功能 因此可以说clang -cc1几乎实现了完正的编译器 通常编译目标是x86机器码时clang -ccl会在生成目标文件.o文件后停止工作因为LLVM链接器仍处于试验阶段未被集成。 在生成目标文件后控制权被交还给编译器驱动程序由其调用外部工具来链接整个项目 使用-###可以看见 在内部clang -ccl的每个调用都由一个相应的主前端操作来控制 完整的定义在源文件include/clang/Frontend/FrontendOptions.h中 操作说明ASTView解析AST并在Graphviz中查看EmitBC产生LLVM位码.bc文件EmitObj产生特定于目标的.o文件FixIt解析任何Fixit并应用于源码PluginAction运行一个插件操作RunAnalysis运行一个或多个源码分析 选项-cc1会触发cc1_main函数的执行 在tools/driver/ccl_main.cpp可以看到源码 Ag通过clang hello.c -o hello来间接调用-cc1时此时函数会初始化指定目标机器码的信息并设置诊断基础设施还会执行EmitObj操作该操作是在FrontendAction的一个子类CodeGenAction中实现的 该代码将实例化的所有Clang和LLVM组件并协调指挥这些组件构建目标文件 不同前端操作的存在使Clang除了可以执行整个编译过程之外还可以执行诸如静态分析之类的其他编译阶段。通过-target命令行参数可以为clang指定编译目标根据不同的编译目标clang加载不同的ToolChain对象并执行和编译目标对应的前端操作使用相应的外部工具完成编译过程 库 libclang是提供给外部Clang用户的最重要的接口之一它通过C API 提供强大的前端功能。它包括几个Clang库这些库也可以单独使用并一起链接到用户自己的项目中 列一下一些 libclangLex :用于预处理和词法分析处理宏令牌和pragma构造libclangAST 为构建、操作和遍历抽象语法树AST增加了其他功能libclangParse 用于使用词法分析阶段的结果进行逻辑解析libclangSema 用于语法分析语义分析为AST验证提供操作libclangCodeGen使用编译目标的信息来生成LLVM IR代码libclangAnalysis 包含用于静态分析的资源libclangRewrite 用于支持代码重写并为构建代码重构工具提供基础架构libclangBasic提供一组使用程序包括内存分配抽象、源码位置和诊断等 抽象语法树 Abstract Syntax Tree简称 AST是一种树状结构用来表示源代码的语法结构。它以树状的形式表现编程语言的语法结构树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的是因为这里的语法并不会表示出真实语法中出现的每个细节。比如嵌套括号被隐含在树的结构中并没有以节点的形式呈现而类似于 if-condition-then 这样的条件跳转语句可以使用带有三个分支的节点来表示。 AST 的根节点通常表示整个源代码子节点表示源代码的各个组成部分例如函数、变量、表达式等。每个节点可以包含一些属性例如类型、值等。 AST 的应用非常广泛包括 编译AST 可以用于编译器中将源代码转换为机器代码。解释AST 可以用于解释器中直接执行源代码。代码分析AST 可以用于代码分析工具中例如静态代码检查、代码生成等。代码编辑AST 可以用于代码编辑器中例如语法高亮、自动补全等。 下面是一个简单示例展示了如何将以下代码转换为 AST def add(a, b):return a b/ \ return/ \a b在这个 AST 中 根节点是 , 表示赋值操作。左子节点是 , 表示加法操作。右子节点是 return, 表示返回语句。 节点的左子节点是 a表示变量 a。 节点的右子节点是 b表示变量 b。 AST 是理解编程语言语法和语义的一种重要工具。它可以帮助我们更好地理解代码的结构和运行方式。 如何理解驱动二字 要理解“驱动程序”中的“驱动”二字首先要明确“驱动程序”的定义。驱动程序全称设备驱动程序是一种可以使计算机和设备通信的特殊程序。它相当于硬件的接口操作系统只有通过这个接口才能控制硬件设备的工作。 “驱动”的本义是指用鞭子或其他工具抽打牲口使之前进。在“驱动程序”中“驱动”的含义可以理解为 控制驱动程序可以控制硬件设备的行为例如让声卡播放音乐让打印机打印文档。管理驱动程序可以管理硬件设备的资源例如分配内存空间、请求中断。翻译驱动程序可以将操作系统的指令翻译成硬件设备能够理解的语言。 因此“驱动程序”中的“驱动”二字可以理解为控制、管理、翻译。 具体来说驱动程序的作用可以概括为以下几点 提供硬件设备的接口驱动程序为操作系统提供了一个标准的接口使操作系统可以访问和控制硬件设备。实现硬件设备的功能驱动程序可以实现硬件设备的所有功能例如读写数据、控制设备状态等。提高硬件设备的性能驱动程序可以优化硬件设备的性能提高工作效率。 驱动程序是计算机系统的重要组成部分对于计算机与硬件设备的正常工作至关重要。
http://www.w-s-a.com/news/993341/

相关文章:

  • 厦门网站建设慕枫学做网站需要多久
  • 爱奇艺做任务领vip网站设计广告图片
  • 中科汇联网站建设手册上海公司名称注册查询网
  • 网站建设电子商务课总结和体会关于做网站书籍
  • 仪征网站建设公司哪家好简单网页制作素材图片
  • 甘肃第九建设集团公司网站潍坊个人做网站
  • 如何做后台网站的教程网站建设 关于我们
  • 极速网站建设哪家好连云港百度推广网站建设
  • 医院网站建设的目标wordpress中英文网站模板
  • 门户型网站开发难度网站导航栏有哪些
  • 推荐做任务网站软件定制开发哪家好
  • 邯郸兄弟建站第三方仓储配送公司
  • 商丘家具网站建设wordpress 添加代码
  • 基础建设的网站有哪些内容成都科技网站建设咨询电话
  • 券多多是谁做的网站招聘网站开发模板
  • 网站主机一般选哪种的企业数字展厅
  • 网站建设该如何学衡水建设局网站首页
  • 高校网站建设工作总结番禺网站开发哪家好
  • 苏州 网站的公司wordpress主页代码
  • 怎么用html做图片展示网站外贸网站建设推广费用
  • 可以做本地生活服务的有哪些网站中油七建公司官网
  • 如何建设谷歌网站网站建设优点
  • 做网站的目标是什么产品宣传片制作公司
  • 柳州建设公司网站辽宁建设工程信息网评标专家入库
  • 合肥建设学校官方网站excel导入wordpress
  • 禹城网站设计做网站需要考虑哪些
  • 深圳做营销网站建设wordpress添加文章封面
  • 阿里云的网站建设方案织梦和wordpress哪个安全
  • 聊城网站建设公司电话wordpress怎么重新配置文件
  • 创业如何进行网站建设泰州公司注册