Osc*_*ros 9 c# compiler-construction unit-testing compilation tiger
我正在编写一个Tiger编译器C#,我将把Tiger代码翻译成IL.
在实现AST中每个节点的语义检查时,我为此创建了许多单元测试.这很简单,因为我的CheckSemantic方法看起来像这样:
public override void CheckSemantics(Scope scope, IList<Error> errors) {
...
}
Run Code Online (Sandbox Code Playgroud)
所以,如果我想为某个节点的语义检查编写一些单元测试,我所要做的就是构建一个AST,然后调用该方法.然后我可以这样做:
Assert.That(errors.Count == 0);
Run Code Online (Sandbox Code Playgroud)
要么
Assert.That(errors.Count == 1);
Assert.That(errors[0] is UnexpectedTypeError);
Assert.That(scope.ExistsType("some_declared_type"));
Run Code Online (Sandbox Code Playgroud)
但是我现在正在开始代码生成,而且我不知道在为该阶段编写单元测试时可能是一个好的做法.
我正在ILGenerator上课.我考虑过以下几点:
但我想知道是否有更好的方法呢?
Eri*_*ert 14
这正是我们在C#编译器团队中测试我们的IL生成器所做的.
我们还通过ILDASM运行生成的可执行文件,并验证IL是否按预期生成,并通过PEVERIFY运行它以确保我们生成可验证的代码.(当然,除非我们故意生成无法验证的代码.)
| 归档时间: |
|
| 查看次数: |
495 次 |
| 最近记录: |