当前位置: 首页 > 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.dtcms.com/a/323422.html

相关文章:

  • 力扣面试150(51/100)
  • 【Python 工具人快餐 · 第 2 份】
  • 使用SPM进行核磁数据预处理
  • 【无标题】六边形结构在二维拓扑量子色动力学模型中确实具有独特优势,并构建完整的二维拓扑量子色动力学模型。
  • Redis三种特殊数据类型
  • 【深度学习2】logistic回归以及梯度下降
  • synchronized和RentrantLock用哪个?
  • Datawhale AI夏令营第三期,多模态RAG方向 Task2
  • 小白成长之路-Docker部署
  • 第二十八天(cookiesessiontokeny验证)
  • JVM性能调优的原则有哪些?
  • 深入理解C++构造函数与初始化列表
  • P1025 [NOIP 2001 提高组] 数的划分 题解
  • 【嵌入式DIY实例-Arduino篇】-水质检测系统
  • SQL面试题及详细答案150道(01-20) --- 基础概念与语法篇
  • python踩坑之识别错误...
  • 如何分析需求的可行性
  • Spring——Spring懒加载设计使用场景
  • 深入解析进程创建与终止机制
  • Linux 信号处理标志sa_flags详解
  • MPU-6050 超实用入门
  • 一文详解 C++ 继承体系
  • [C/C++线程安全]_[中级]_[多线程如何使用共享锁提升性能]
  • EP06:【DL 第二弹】动态计算图与梯度下降入门
  • 【C/C++】具有C风格的强制类型转换:显式类型转换、隐式类型转换,C语言强制类型转换
  • 第六章:【springboot】框架springboot原理、springboot父子工程与Swagger
  • 算法题(183):质量检测
  • 《答客难》东方朔
  • 网络原理-初识
  • FreeRTOS入门知识(初识RTOS任务调度)(三)