1

我想要一个导入另外两个文件的文件。第一个导入的文件实际上创建了第二个要导入的文件,因此必须在导入后立即执行。这在 Specman 中可能吗?我想我在其中一本手册中读到了某些内置函数在文件加载后立即运行。

接下来是我假设第一个文件可以使用 Specman 的反射来访问其他先前导入的结构/单元来决定生成什么。有关使用反射的更多信息:StackOverflow - 在 Specman 中使用反射

例子:

File1.e:
<'
  // Function that runs immediately after this file is loaded
  // and generates File2.e
  on_load???(){
    ...
  };
'>

File2.e:
<'
// This file was generated by File1.e
'>

top.e:
<'
import File1;
import File2;
'>
4

1 回答 1

2

这几乎可以工作,但看起来新版本的specman不允许#ifdef进口..如果你能弄清楚ifdef用法那么这将工作......

               top.e
       +--------/| \----------+
      /          |             \
macro.e    macro_call.e     generated_loader.e
                                 |
                             generated.e

top.e有:

<'
import macro;
import macro_call;
import generated_loader;
'>

macro.e有:

<'
define <GENERATOR'statement> "GENERATOR" as computed {
    compute system("printf \"<'\\nextend sys{run() is first { print \\\"in generated.e\\\"; }; };\\n'>\\n\">generated.e");
};
#define ENABLE_GENERATOR_LOADER 1;
'>

macro_call.e有:

<'
GENERATOR;
'>

generated_loader.e有:

<'
#ifdef ENABLE_GENERATOR_LOADER {
import generated.e;
};
'>

然后在宏运行generated.e后应该有以下内容:GENERATOR

<'
extend sys{run() is first { print "in generated.e"; }; };
'>

但是,Specman 的 10 版不喜欢 中的 import 语句#ifdef,尽管这是#ifdefSpecman 6.1 文档中的一个使用示例:

specman -c 'load top; test'

产量:

[...]
Loading generated_loader.e   (imported by top.e) ...
read...parse...update...
   *** Error: Import Statements should be placed at the top of the file -
please change the statements order, pay attention to the imported module
'generated.e'.
                at line 4 in generated_loader.e
import generated.e;

编辑

再想一想,您可能只想define as computed生成要在适当位置解析的代码,而无需经历生成新文件的麻烦。

于 2013-05-22T21:15:54.320 回答