分析源代码中的每个类的成员函数及其作用,分析源代码中的不同类的调用关系package inter; import lexer.*; import symbols.*; public class Logical extends Expr { public Expr expr1, expr2; Logical(Token tok, Expr x1, Expr x2) { super(tok, null); // null type to start expr1 = x1; expr2 = x2; type = check(expr1.type, expr2.type); if (type == null ) error("type error"); } public Type check(Type p1, Type p2) { if ( p1 == Type.Bool && p2 == Type.Bool ) return Type.Bool; else return null; } public Expr gen() { int f = newlabel(); int a = newlabel(); Temp temp = new Temp(type); this.jumping(0,f); emit(temp.toString() + " = true"); emit("goto L" + a); emitlabel(f); emit(temp.toString() + " = false"); emitlabel(a); return temp; } public String toString() { return expr1.toString()+" "+op.toString()+" "+expr2.toString(); } }
时间: 2023-05-29 14:04:20 浏览: 112
分析 C 或 C++ 语言代码的函数调用关系
该代码中定义了一个名为Logical的类,该类继承自Expr类,其中包含了两个成员变量expr1和expr2,以及一个构造函数Logical。构造函数接受三个参数:Token类型的tok,Expr类型的x1和Expr类型的x2。构造函数在调用父类Expr的构造函数时传入了一个null类型的参数,用于初始化type成员变量。
check函数是Logical类中的一个公共成员函数,其作用是检查两个参数的类型是否相同。如果类型相同,则返回该类型;如果不同,则返回null,表示类型错误。
在该代码中,Logical类是在inter包中定义的,该包中还包含了lexer和symbols两个包。lexer包中包含了词法分析器相关的类和函数,symbols包中则包含了符号表相关的类和函数。因此,Logical类可以使用这两个包中的类和函数来实现其功能。
在该代码中,Logical类被其他类调用,但具体被哪些类调用需要查看调用该类的源代码。
阅读全文