2周自制脚本语言
1.前言与说明
开始时间:2021年6月13日
目的:以实践的形式了解编译原理的部分知识,动手自制改进脚本语言
后来发现理解代码太难太难,最终选择将能看懂的代码进行注释
本文没有什么参考价值,完全是我在学习过程中的无聊笔记。排版也比较乱。
开始注释
第三章代码注释完成
实现词法分析功能。
第四五章代码注释完毕
实现语法分析
有很多东西虽然可以猜到是什么意思,但还是理解不够透彻,不知道具体每一步骤实在做什么。
整体介绍
/ast
包含abstract syntax tree(ast) 的数据结构
/stone
**Token.java**
是每个token的抽象类
**Lexer.java**
词法分析器,通过正则表达式分析出一个一个语法单位。其中还包括Token的三个子类 NumToken IdToken StrToken
**CodeDialog.java**
Reader的子类,为词法分析器做了一些预处理。
**Parser.java**
作者提供的类库 用于语法分析的类,提供了语法分析的方法
**ParseException**
重写的异常处理类
**BasicParser**
用于执行语法处理的类
实际上上述做的就是 构造出一个具体的抽象语法树。
继续继续
第六章代码注释完毕
主要功能是对抽象语法树进行解释和计算。
整体介绍
- 通过gluonj 扩展AST类中的数据结构源代码,使每一个节点都有eval方法,用于计算
- 计算的过程是从上到下递归,类似于深度优先遍历
- 在eval中对常用的运算符:+ = == > 等,以及if while 代码块做具体的处理。
- 至此,stone语言可以是实现基本的运算功能。
关于gluonj
gluonj is a sample of AOP,it provide a way to extend a Class
such as:
@Reviser public static class ASTLeafEx extends ASTLeaf{
public ASTLeafEx(Token t