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

LLVM编译器入门

文章目录

  • LLVM整体设计
  • Clang前端
    • 基本概念
    • 功能分析
      • AST结构
  • IR优化
  • 代码生成
  • 参考

LLVM整体设计

Clang前端

基本概念

Clang 项目为LLVM项目提供C 语言系列语言C、C++、Objective C/C++、OpenCL、CUDA 和RenderScript)的语言前端和工具基础设施

Clangdriver(命令行表示是clang)和Clang前端(依照详细实现来说就是Clang的那些库所实现的前端)是不同的。Clang driver不只包括了
Clang前端,还包括使用LLVM的库实现的编译器的中间阶段以及后端,同时也集成了assembler。除了普通的前端工作,Clang还在不断发展,将其功能划分为库和模块,以便开发人员可以使用它们创建各种与源代码处理相关的工具;例如,代码重构编码格式化和语法高亮。

在这里插入图片描述

功能分析

阶段任务描述关键输入关键输出
预处理(Preprocessor)处理头文件、宏展开、条件编译等预处理指令。源代码(含预处理指令)展开后的纯代码(无预处理指令)
词法分析(Lexer)逐字符扫描源代码,识别单词(如标识符、关键字、运算符等),并转换为统一的词法单元(Token)。预处理后的代码Token序列(如 [int, x, =, 5]
语法分析(Parser)根据语法规则将Token序列转换为语法分析树(如AST),检查语法结构是否正确(如括号匹配、语句结构)。Token序列抽象语法树(AST)
语义分析(Sema)收集标识符属性(类型、作用域等),检查语义错误(如未声明变量、类型不匹配、重复定义)。AST带语义信息的AST(符号表填充)
代码生成(CodeGen)将AST转换为目标平台的中间代码(如LLVM IR)或机器代码。带语义信息的ASTLLVM IR/汇编代码/机器代码

AST结构

在使用自定义逻辑扩展Clang时,AST是最重要的原语。所有常见的Clang扩展/插件都是
基于ASTi运行的:clang-Xclang-ast-dump -fsyntax-only test.c

Clang中语法分析器会从之前的分析中提取要使用的标记信息,确定它的语法元素后会被推送到语义分析Sema,并为它创建AST节点,建立一颗与(词法分析出的)输入单词流对应的正确语法树。Clang构建AST树的核心类是ParseAST函数,初始化Compilerlnstance之后,调用其成员函数ExcuteAction进行解析与处理。

在这里插入图片描述

AST可细分为:declaration(Decl)声明,statement(Stmt)语句,expression(Expr)表达。
在这里插入图片描述
在这里插入图片描述

IR优化

代码生成

参考

  • LLVM编译器入门(二):Clang前端
  • LLVM编译器入门(二):Clang前端[PPT]
http://www.lryc.cn/news/614827.html

相关文章:

  • Java基础-TCP通信单服务器接受多客户端
  • 关于开发语言的一些效率 从堆栈角度理解一部分c java go python
  • 软考 系统架构设计师系列知识点之杂项集萃(119)
  • 数据结构(9)——排序
  • QT第三讲- 机制、宏、类库模块
  • 数字图像处理基础——opencv库(Python)
  • 算法_python_牛客华为机试笔记_01
  • 【Python 高频 API 速学 ③】
  • RecyclerView 中 ViewHolder
  • TDengine IDMP 快速体验(1. 通过云服务)
  • 【CVPR2025】计算机视觉|PX:让模型训练“事半功倍”!
  • vscode/trae 的 settings.json 中配置 latex 的一些记录
  • 设备点检系统二维码的应用
  • 我用C++和零拷贝重构了文件服务器,性能飙升3倍,CPU占用降低80%
  • Amazon Linux 训练lora模型的方式
  • 《算法导论》第 14 章 - 数据结构的扩张
  • ruoyi关闭shiro校验,任何接口可以直接访问
  • C++-红黑树
  • [C/C++线程安全]_[中级]_[多线程如何使用共享锁提升性能]
  • Meta AI水印计划的致命缺陷——IEEE Spectrum深度文献精读
  • 第4章 程序段的反复执行4.2while语句P128练习题(题及答案)
  • ppt 生成视频的 ai 大模型全面解析
  • (talk)西安大模型开发者talk
  • vue+flask大模型写诗诗词推荐与可视化系统
  • 浏览器面试题及详细答案 88道(01-11)
  • 项目一系列-第4章 在线接口文档 代码模板改造
  • AJAX与axios框架
  • Netty-Rest搭建笔记
  • 系统集成项目管理工程师【第十一章 规划过程组】规划成本管理、成本估算、制定预算和规划质量管理篇
  • 轻松实现浏览器自动化——AI浏览器自动化框架Stagehand