
Javac
FlyingZCC
Apache ShardingSphere Committer
GitHub: https://github.com/FlyingZC
Blog: https://flyingzc.github.io
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
markdown解析
markdown解析demo1.解析markdown里的所有代码块.通过创建visitor,收集markdown里的代码片段并分类.public static void main(String[] args) throws IOException { Parser parser = Parser.builder().build(); try (InputStreamReader reader = new InputStreamReader(new FileInputStream(SR原创 2021-12-05 10:42:20 · 868 阅读 · 0 评论 -
JSqlParser使用
JSqlParser使用什么是JSqlParserJSqlParser 是一个 SQL 语句解析器。它将 SQLs 转换为可遍历的 Java 类层次结构。如何使用JSqlParser1.添加依赖<dependency> <groupId>com.github.jsqlparser</groupId> <artifactId>jsqlparser</artifactId> <version>4.2</version原创 2021-12-05 10:38:50 · 1571 阅读 · 2 评论 -
Javaparser使用
Javaparser使用什么是Javaparser分析,转换,生成Java代码.Javaparser库为你提供了一个 Java 代码的抽象语法树(Abstract Syntax Tree)。AST 结构允许您以一种简单的编程方式使用 Java 代码。为什么需要Javaparser相对于antlr4,Javaparser提供了更多的API,专门操作Java文件,使用起来更简单.使用1.解析多个Java文件/*** 解析工程下的所有Java文件** @param path 工程根目录*原创 2021-12-04 10:21:38 · 110032 阅读 · 1 评论 -
Javac 生成字节码文件
Javac 生成字节码文件Javac 生成 Class 文件的过程,主要类是 com.sun.tools.javac.jvm.ClassWriter.Class 文件的结构Class 文件中存储了两种数据类型:无符号数和表。表是用来描述有层次关系的复合结构的数据.而无符号数可以用来标识一个具体结构的类型,或者还可以表示数量及属性长度等.在 Javac 的 ByteBuffer 类中提供了写入基本类型的常用方法,如 appendByte() 方法ByteBuffer 对象表示一个具体的缓冲,主要原创 2020-12-02 22:33:04 · 959 阅读 · 0 评论 -
Javac 字节码指令生成
Javac 字节码指令生成根据标注语法树进行指令翻译,将方法中一系列的语句翻译为 Java 虚拟机能够执行的一系列指令.生成字节码指令JVM 在执行 Class 文件中的字节码指令时,会以入栈与出栈的方式执行.Java 虚拟机会为每个新创建的线程分配一个 Java 栈,同时分配一个 PC 寄存器,这个 PC 寄存器保存了 Java 虚拟机正在执行的字节码指令的地址。当调用一个方法时会在这个栈上新创建一个栈桢。每个栈桢内部都包含一组称为局部变量表的变量列表,同时还包含一个称为操作数栈的栈。Jav原创 2020-11-23 22:27:35 · 566 阅读 · 0 评论 -
Javac 数据流检查
Javac 数据流检查数据流检查包括: 变量赋值检查、语句活跃性分析 与 异常检查,实现类 com.sun.tools.javac.comp.Flow.FlowFlow 类继承自 TreeScanner 类并选择性覆写 visitXxx() 方法来完成具体的数据流检查.这个类中的入口方法是 analyzeTree()每一个顶层类都会调用这个方法初始化一些重要的变量,然后调用 scan() 方法扫描语法树的各个语法节点进行数据流检查。语句的活跃性分析语句的活跃性是指这个语句是否有可能被执行,或者原创 2020-11-21 22:47:27 · 239 阅读 · 0 评论 -
Javac语法树标注
Javac语法树标注语法树标注 就是 在抽象语法树上 标注好 符号及类型.任何树节点 实现类 都定义了 type 变量,这个变量 用来保存类型.类型可能是 当前树节点定义的类型,也可能是 引用其他已经定义好的类型.如果是 引用其他已经定义好的类型,那么就需要 在语法树标注阶段 查找这个具体的类型 并保存到对应树节点的 type 变量上。JCCompilationUnit 类的 packge 变量保存包符号,如果这个包名称所对应的 PackageSymbol 对象已经存在,直接使用即可,如果不存在,原创 2020-11-19 22:35:55 · 381 阅读 · 0 评论 -
Javac注解处理器
Javac注解处理器注解处理器注解处理器 用于在编译器处理注解.继承自 AbstractProcessor方法init()初始化许多注解操作的工具类getSupportedOptions()注解处理器配置支持的选项getSupportedAnnotationTypes()注解处理器配置支持的注解类型getSupportedSourceVersion()注解处理器配置所支持的 JDK 版本初始化注解处理器JavaCompiler.initProcessAnnotations() 完原创 2020-11-05 22:31:28 · 337 阅读 · 0 评论 -
Javac符号表填充
Javac符号表填充相关类com.sun.tools.javac.comp.Entercom.sun.tools.javac.comp.MemberEnter这两个类都继承了 JCTree.Visitor 抽象类,并选择性地覆写了 visitXxx() 方法,然后自上而下遍历抽象语法树,将遇到的 符号定义 填充到 符号表中.执行流程调用 compiler.compile() 时会创建 Compiler 对象,同时创建 Compiler -> ClassReader -> Symtab原创 2020-10-29 00:01:46 · 449 阅读 · 0 评论 -
Javac符号表定义
Javac符号表定义符号表: 存储符号的容器Javac 语义分析首先要建立符号表.Javac 在遇到 声明 或 定义 时会创建符号, 将创建好的符号输入到符号表中, 方便查找.符号的定义符号通过 com.sun.tools.javac.code.Symbol 类和相关的子类来表示Symbol (com.sun.tools.javac.code) DelegatedSymbol in Symbol (com.sun.tools.javac.code) Method in P原创 2020-10-26 23:02:06 · 562 阅读 · 0 评论 -
Javac 语法分析1
Javac 语法分析1语法分析: 根据一个个 Token 构造出抽象语法树语法树节点类基类 JCTree其他类均在 JCTree 里 定义的静态内部类,比如JCStatement in JCTree (com.sun.tools.javac.tree) 表示语句 JCMethodDecl in JCTree (com.sun.tools.javac.tree) 表示一个方法定义,包括抽象 和 非抽象方法 JCModifiers in JCTree (com.sun.tools.ja原创 2020-10-20 23:00:34 · 341 阅读 · 0 评论 -
Javac词法分析
Javac 词法分析词法分析主要将 Java 源代码中的所有字符转变为 TokenToken类型com.sun.tools.javac.parser.Tokens.TokenKindEOF(),ERROR(),IDENTIFIER(Tag.NAMED), // 这个 Token 对象没有 name 值,用来泛指用户自定义的类名、包名、变量包、方法名等ABSTRACT("abstract"),ASSERT("assert", Tag.NAMED),BOOLEAN("boolean", Tag原创 2020-10-15 22:50:53 · 401 阅读 · 0 评论 -
Javac源码阅读环境搭建
项目clone hotspot8 的源码将该路径作为 idea 项目的根路径openjdk/langtools/src/share/classes新建 targets 作为编译后的 classes 的输出目录启动启动类com.sun.tools.javac.Main#main控制台会报:用法: javac <options> <source files>其中, 可能的选项包括: -g 生成所有调试信息 -g:原创 2020-08-23 23:14:51 · 300 阅读 · 0 评论