java AST 表达式_java 编译时注解-AST 抽象语法树简介
AST 语法入门
以前使用 Lombok 一直觉得是一个很棒的设计,可以同时兼顾注解的遍历和运行的性能。
运行时注解一直因为性能问题被人诟病。
自己尝试写过一些框架,但是耗费了比较多的精力,因为 AST 语法不是很熟悉,所以准备整一个系列,入门学习下 AST 语法。
AST(Abstract syntax tree) 抽象语法树
AST是javac编译器阶段对源代码进行词法语法分析之后,语义分析之前进行的操作。
用一个树形的结构表示源代码,源代码的每个元素映射到树上的节点。
java 编译时的三个阶段
Java源文件->词法,语法分析-> 生成AST ->语义分析 -> 编译字节码,二进制文件。
通过操作 AST 可以实现 java 源代码的功能。
Rewrite、JavaParser 等开源工具可以帮助你更简单的操作AST。
所有源文件会被解析成语法树。
调用注解处理器。如果注解处理器产生了新的源文件,新文件也要进行编译。
最后,语法树会被分析并转化成类文件。
个人愿景
通过学习 AST 和 javaParser 等优秀框架的精华,提炼一个可以非常方便生成 class 文件的工具。
思路
源文件==》拓展后的文件==》AST 语法树==》class 文件覆盖
其他
后续学习下 java-sandbox 的思想和实现方式,拓展一下 AOP 的实现种类。
灵活强大。
拓展阅读
ASM
java 源码
参考资料
java AST 表达式_java 编译时注解-AST 抽象语法树简介相关推荐
- 【转】抽象语法树简介(AST)
引用地址:http://blog.chinaunix.net/uid-26750235-id-3139100.html 抽象语法树简介 (一)简介 抽象语法树(abstract syntax code ...
- java 取消引用_java编译时所说的“无法取消引用”是什么意思
部分代码如下:publicabstractclassAnimal//animal类定义为抽象类{publicstaticfinalbooleanisMammal=false;publicstaticf ...
- java抽象语法树_抽象语法树AST的全面解析(一)
Javac编译概述 将.java源文件编译成.class文件,这一步大致可以分为3个过程: 1.把所有的源文件解析成语法树,输入到编译器的符号表: 2.注解处理器的注解处理过程: 3.分析语法树并生成 ...
- AST(抽象语法树)超详细
自己研究的东西会用到AST,就自己通过查阅资料,整理一下. 本文目录 第一部分:AST的作用 第二部分:AST的流程 第三部分: Eclipse AST的获取与访问 第一部分:AST的作用 首先来一个 ...
- Java解析SQL生成语法树_04. Hive源码 — HQL解析(抽象语法树的生成和语义分析)
HQL的解析过程主要在Driver中的compile方法,这一些主要看这个方法中的代码. 1. compile中的主要内容 public int compile(String command, boo ...
- 【Groovy】编译时元编程 ( ASTTransformation#visit 方法简介 | org.codehaus.groovy.ast.ModuleNode 脚本节点 )
文章目录 一.ASTTransformation#visit 方法简介 二.org.codehaus.groovy.ast.ModuleNode 脚本节点 一.ASTTransformation#vi ...
- java编译时注解_简单介绍 Java 中的编译时注解
1. 前言 上一篇 主要介绍了什么是 注解 (Annotation) 以及如何读取 运行时注解 中的数据, 同时用注解实现了简单的 ORM 功能. 这次介绍另一部分: 如何读取 编译时注解 ( Ret ...
- 3. 自定义Java编译时注解处理器
1. 絮絮叨叨 要么是注解跟我有仇,要么是公司配发的笔记本跟我有仇,要么是因为心急吃不了热豆腐 痛定思痛:从头开始,新建一个Java项目,实现一个超级简单的注解@Hello 通过获取被标识类的类名(原 ...
- java可以在类中直接定义语句_基于javac实现的编译时注解
很多同学都知道jdk中有一个很重要的jar : tools.jar,但是 很少有人知道这个包里面究竟有哪些好玩的东西. javac入口及编译过程 在使用javac命令去编译源文件时,实际上是去执行co ...
最新文章
- html显示三维模型restful,返回带有Flask Restful的呈现模板,在浏览器中显示HTML
- 基于cocos2d-x的快速的游戏开发--回合制游戏
- AI:《Why is DevOps for Machine Learning so Different?—为什么机器学习的 DevOps 如此不同?》翻译与解读
- 传统APP与微信端APP十大优劣对比
- oracle数据库配置助手来初始化参数,使用服务器参数文件(SPFILE)管理初始化参数...
- python爬虫程序的流程图_Python即时网络爬虫项目: 内容提取器的定义(Python2.7版本)...
- JAVA入门学习 —数组排序的方法
- 仙剑奇侠传五破解方法(虚拟机版)
- Dhtmlx Gantt 快速入门至精通
- 【洋桃电子】STM32入门100步-01
- 两栏 论文首页 插尾注方法 word2019
- 警惕!关于5G的最新骗局!
- author-头文字注释
- matlab logpolar,GitHub - luxinjin/polar-code: matlab simulation for polar code
- OpenSSL公钥 私钥 RSA
- mysql 时间函数的使用
- 把文件放在服务器上以供用户下载
- 那些可盐可甜的AI声音,可能都是出自于这家公司
- git-bash.exe和git-cmd.exe运行Git的区别
- 【经验】申请联合培养博士出国
热门文章
- 【ACE Meetup天津站】云计算时代的运维管理
- vscode+MinGW+cmake设置轻量ide
- 有用的SAP System Administration T-CODE
- Vim 快捷键整理【转】
- 6.3 Spring Boot集成mongodb开发
- AtCoder Beginner Contest 022 A.Best Body 水题
- 可在广域网部署运行的QQ高仿版 -- GG叽叽(开源)
- 微软陆续更新Win8应用 否认靠金钱争取开发者
- Windows 7官方主题之“海上航行”
- postfix管理邮件队列的小程序