分析源代码中的每个类的成员函数及其作用,分析源代码中的不同类的调用关系package inter; import lexer.*; import symbols.*; public class Expr extends Node { public Token op; public Type type; Expr(Token tok, Type p) { op = tok; type = p; } public Expr gen() { return this; } public Expr reduce() { return this; } public void jumping(int t, int f) { emitjumps(toString(), t, f); } public void emitjumps(String test, int t, int f) { if( t != 0 && f != 0 ) { emit("if " + test + " goto L" + t); emit("goto L" + f); } else if( t != 0 ) emit("if " + test + " goto L" + t); else if( f != 0 ) emit("iffalse " + test + " goto L" + f); else ; // nothing since both t and f fall through } public String toString() { return op.toString(); } }
时间: 2023-05-29 21:04:12 浏览: 179
分析 C 或 C++ 语言代码的函数调用关系
) emit("if " + test + " goto L" + t); if( f != 0 ) emit("else goto L" + f); }
1. Expr类
成员函数:
- Expr(Token tok, Type p):构造函数,初始化Expr类的成员变量op和type。
- public Expr gen():返回当前Expr对象。
- public Expr reduce():返回当前Expr对象。
- public void jumping(int t, int f):根据条件跳转。
- public void emitjumps(String test, int t, int f):发出跳转代码。
作用:
- Expr类是所有表达式的基类,它包含了表达式的基本属性和行为。在编译器中,所有的表达式都是Expr类或其子类的实例。
- Expr类的成员函数实现了表达式的生成、规约和跳转等功能,是编译器中表达式处理的核心。
2. Node类
成员函数:
- public int newlabel():返回一个新的标签。
- public void emitlabel(int i):发出一个标签。
作用:
- Node类是所有语法树节点的基类,它包含了语法树节点的基本属性和行为。在编译器中,所有的语法树节点都是Node类或其子类的实例。
- Node类的成员函数实现了语法树节点的标签生成和标签发出等功能,是编译器中语法树节点处理的核心。
3. Stmt类
成员函数:
- public Stmt():构造函数。
- public static Stmt Null:返回一个空语句。
- public void gen(int b, int a):生成语句代码。
作用:
- Stmt类是所有语句的基类,它包含了语句的基本属性和行为。在编译器中,所有的语句都是Stmt类或其子类的实例。
- Stmt类的成员函数实现了语句的代码生成等功能,是编译器中语句处理的核心。
4. Set类
成员函数:
- public Id id;
- public Expr expr;
- public Set(Id i, Expr x):构造函数,初始化Set类的成员变量id和expr。
- public void gen(int b, int a):生成赋值语句代码。
作用:
- Set类表示赋值语句,它包含了赋值语句的左值和右值。
- Set类的成员函数实现了赋值语句的代码生成等功能,是编译器中赋值语句处理的核心。
5. If类
成员函数:
- public Expr expr;
- public Stmt stmt;
- public If(Expr x, Stmt s):构造函数,初始化If类的成员变量expr和stmt。
- public void gen(int b, int a):生成if语句代码。
作用:
- If类表示if语句,它包含了if语句的条件表达式和语句。
- If类的成员函数实现了if语句的代码生成等功能,是编译器中if语句处理的核心。
6. Else类
成员函数:
- public Expr expr;
- public Stmt stmt1, stmt2;
- public Else(Expr x, Stmt s1, Stmt s2):构造函数,初始化Else类的成员变量expr、stmt1和stmt2。
- public void gen(int b, int a):生成if-else语句代码。
作用:
- Else类表示if-else语句,它包含了if-else语句的条件表达式和语句。
- Else类的成员函数实现了if-else语句的代码生成等功能,是编译器中if-else语句处理的核心。
7. While类
成员函数:
- public Expr expr;
- public Stmt stmt;
- public While():构造函数。
- public void init(Expr x, Stmt s):初始化While类的成员变量expr和stmt。
- public void gen(int b, int a):生成while语句代码。
作用:
- While类表示while语句,它包含了while语句的条件表达式和语句。
- While类的成员函数实现了while语句的代码生成等功能,是编译器中while语句处理的核心。
阅读全文