`
NeuronR
  • 浏览: 58970 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

[开发过程]声明与算术节点的测试

阅读更多

    E, 这个算术节点指的是 ArithmaticNode.

    由于之前已经测试了ArithmaticNode 全部可能的子节点项目, 因此这次要测试的非常简单, 只需要查看运算指令执行完毕后, 弹栈弹出的大小是不是期望的那么多. 所以, 直接上测试例子了

    struct List* ins;
    struct List* subIns;
    struct ArithmaticNode* a;

    struct IntegerNode* i = newIntegerNode(14);
    a = newArithmaticNode((struct AbstractValueNode*)i);
    subIns = i->createInstruction(i);
    ins = a->createInstruction(a);

    assert(1 + subIns->count(subIns) == ins->count(ins));
    while (0 != subIns->count(subIns)) {
        assertInsEqual_Del(ins->popElementAt(ins, 0),
                           subIns->popElementAt(subIns, 0));
    }

    assert(POP == ((struct AbstractInstruction*)
                           (ins->elementAt(ins, 0)))->code);
    assert(INT_SIZE == ((struct IntParamInstruction*)
                           (ins->elementAt(ins, 0)))->param);
    revert(ins->popElementAt(ins, 0));
    ins->finalize(ins);
    subIns->finalize(subIns);
    a->delNode(a);

对于子节点的指令, 仍然是产生相同的节点指令再一一匹配. 下面就轮到声明语句了.

    声明语句除了产生指令之外, 还会注册符号. 不过, 注册符号的具体细节在符号表模块已经完成了测试, 现在只是进行一点点简单的验证工作, 看看指定的变量是否被注册了. 比如这样

struct {
    char* ident;
    AcceptType type;
    int nrDim;
    int offsets[MAX_ARRAY_SIZE];
    int size;
    int base;
} data[NR_TEST_CASE] = {
    { "testee", INTEGER },
    { "tom", INTEGER },
    { "jerry", REAL },
    { "mANDg", REAL }
};

char* ident = "param";
char* ident1 = "param1";

    struct DeclarationNode* dec;
    struct List* ins;

    initialSymTabManager();
    dec = newDeclarationNode(INTEGER_TYPE);
    dec->vars->enqueue(dec->vars, newVariableNode(ident));
    dec->initVals->enqueue(dec->initVals, NULL);
    dec->vars->enqueue(dec->vars, newVariableNode(ident1));
    dec->initVals->enqueue(dec->initVals, NULL);
    ins = dec->createInstruction(dec);
    // 类型验证
    assert(INTEGER == typeOf(dec->vars->peekAt(dec->vars, 0)));
    assert(INTEGER == typeOf(dec->vars->peekAt(dec->vars, 1)));
    assert(0 == ins->count(ins));
    ins->finalize(ins);
    dec->delNode(dec);
    finalizeSymTabManager();

当然, 由于没有赋初值的动作, 因此没有任何指令产生. 对于有赋初始值的声明语句才需要测试其生成的指令, 而这些指令与一个算术节点非常类似

    struct DeclarationNode* dec;
    struct VariableNode* var1;
    struct List* ins,* subIns1;

    initialSymTabManager();
    dec = newDeclarationNode(REAL_TYPE);
    dec->vars->enqueue(dec->vars, newVariableNode(ident1));
    dec->initVals->enqueue(dec->initVals, newVariableNode(ident));
    var1 = newVariableNode(ident1);
    ins = dec->createInstruction(dec);
    assert(REAL == typeOf(var1));
    subIns1 = var1->addressOf(var1);

    assert(ins->count(ins) - 2 ==
           subIns0->count(subIns0) + subIns1->count(subIns1));
    while (0 != subIns1->count(subIns1)) {
        assertInsEqual_Del(ins->popElementAt(ins, 0),
                           subIns1->popElementAt(subIns1, 0));
    }
    assert(REAL_ASSIGN == ((struct AbstractInstruction*)
                           (ins->elementAt(ins, 0)))->code);
    revert(ins->popElementAt(ins, 0));
    assert(POP == ((struct AbstractInstruction*)
                           (ins->elementAt(ins, 0)))->code);
    assert(REAL_SIZE == ((struct IntParamInstruction*)
                           (ins->elementAt(ins, 0)))->param);
    revert(ins->popElementAt(ins, 0));
    finalizeSymTabManager();

    这两类节点的指令生成测试大致就是这样了. 请 svn update 一下 Jerry 目录吧.

分享到:
评论

相关推荐

    动力节点-Java基础视频教程

    ### 动力节点-Java基础视频教程知识点概览 #### 一、Java基础知识体系构建 1. **Java语言概述** - Java的发展历程与特点 - Java的应用领域:Web应用开发、移动应用(Android)、大数据处理等 - Java与其他编程...

    北大青鸟5.0JavaScript内部测试题

    1. **基础语法**:包括变量声明(var, let, const)、数据类型(number, string, boolean, null, undefined, object, symbol)、操作符(算术、比较、逻辑)、流程控制(条件语句、循环语句)等。 2. **函数**:...

    网页设计师必看:14个必备Web前端开发速查手册

    - **变量、数据类型与运算符**:讲解JavaScript中的基本语法,包括声明变量、使用不同数据类型以及常见的算术逻辑运算。 - **函数与对象**:深入理解函数的定义与调用过程,学会使用对象来组织复杂数据结构。 - **...

    JavaScript开发技术大全

    1. **基础语法**:包括变量声明(var、let、const)、数据类型(字符串、数字、布尔值、null、undefined、对象、数组、Symbol、BigInt)、运算符(算术、比较、逻辑、位操作、三元运算符)、流程控制(条件语句、...

    测试c#基础考题测试

    根据提供的文件信息,我们可以整理出一系列与C#编程语言及计算机基础知识相关的知识点: ### C#基础知识及计算机原理 #### 题目解析 **Question1.** - **问题描述不清晰,无法直接给出知识点,但从题目编号判断...

    javascript前台开发

    1. **基础语法**:理解变量声明(var、let、const)、数据类型(字符串、数字、布尔、null、undefined、对象、数组、Symbol、BigInt)、操作符(算术、比较、逻辑、三元)、流程控制(条件语句、循环语句、函数、...

    根据数据结构中各数据元素之间前后件关系的复杂程度一般将数据.doc

    标准模块在Visual Basic等编程环境中,用于存放可被多个窗体或程序共享的通用过程,它不依附于任何特定的窗体,但并非只能包含过程,还可以包含变量和常量的声明。 窗体上的控件可以通过设置不同的属性来改变其行为...

    北航计算机复试面试题.pdf

    * 软件测试时软件开发过程的哪个阶段的:软件测试是在软件开发的最后阶段进行的。 计组: * 冯诺依曼系统结构:冯诺依曼系统结构是一种计算机系统结构,包括输入、控制、算术逻辑单元、存储器等部分。 * 冯诺依曼...

    Java范例开发大全 (源程序)

     1.2.4 测试JDK配置是否成功 7  实例1 开发第一个Java程序 7  第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制...

    java范例开发大全

    第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境 5 1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java...

    编译原理词法语法分析器

    ”,语法分析器会创建一个树形结构,其中根节点可能是“声明”,而子节点包括“类型”(int)、“标识符”(x)和“赋值”表达式。这个过程通常由上下文无关文法(Context-Free Grammar,CFG)来描述,它定义了一种...

    C语言职工信息管理系统链表模板.doc

    * 高级语言的特点:易于使用、跨平台、开发效率高 二、C语言基础知识 * C语言的特点:过程式、结构化、可移植 * C语言的基本数据类型:整型、字符型、浮点型 * C语言的运算符:算术运算符、比较运算符、逻辑运算符...

    lvivCode_testTask:测试任务,学习节点

    1. **基础语法**:JavaScript的基础包括变量声明(var、let、const)、数据类型(如字符串、数字、布尔、null、undefined、对象、数组)、操作符(算术、比较、逻辑、赋值等)以及流程控制(条件语句、循环结构)。...

    全国计算机等级考试二级C语言知识点超全整.docx

    6. 树与二叉树:树是一种非线性数据结构,二叉树是每个节点最多有两个子节点的特殊树形结构,用于表示层次关系和实现搜索操作。 7. 查找技术:包括顺序查找、二分查找、哈希查找等,用于快速定位数据。 8. 排序技术...

    Java范例开发大全(全书源程序)

    Java范例开发大全(全书源程序),目录如下: 第1篇 Java编程基础 第1章 Java开发环境的搭建(教学视频:9分钟) 2 1.1 理解Java 2 1.2 搭建Java所需环境 3 1.2.1 下载JDK 3 1.2.2 安装JDK 4 1.2.3 配置环境...

    javascript for web developer

    - **测试与调试**:讨论单元测试、集成测试的重要性,以及如何使用浏览器开发者工具进行调试。 #### 结论 《Professional JavaScript™ for Web Developers》是一本全面覆盖JavaScript核心技术和最佳实践的书籍,...

    全国计算机等级考试二级C语言知识点超全整打印版.docx

    4. **软件测试**:确保软件质量的过程,包括单元测试、集成测试和系统测试。 5. **程序调试**:识别和修复程序中的错误,确保程序正确运行。 四、数据库设计基础 1. **数据库系统的基本概念**:包括数据库、...

    java范例开发大全(pdf&源码)

    1.2.4 测试JDK配置是否成功 7 实例1 开发第一个Java程序 7 第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 ...

    关于JavaScript DOM的学习总结.pdf

    - 运算符:包括算术运算符(+、-、*、/)、赋值运算符(=)、比较运算符(>、<、>=、、==、===、!=)和逻辑运算符(&&、||)。 2. 条件语句和循环语句: - if语句:基于条件执行代码块。 - while循环:只要条件...

    精通javascript动态网页编程

    2. 测试与调试:介绍单元测试、集成测试工具,以及如何使用浏览器开发者工具进行调试。 3. 前端框架:简述React、Vue、Angular等主流前端框架的基本概念和应用场景。 4. 移动端开发:探讨如何使用JavaScript进行移动...

Global site tag (gtag.js) - Google Analytics