1

他の 2 つのファイルをインポートするファイルが必要です。最初にインポートされたファイルは、実際にはインポートされる 2 番目のファイルを作成するため、インポート後すぐに実行する必要があります。これは Specman で可能ですか? ファイルがロードされた直後に実行される特定の組み込み関数があるマニュアルの 1 つを読んだと思いました。

続いて、この最初のファイルが Specman の Reflection を使用して、以前にインポートされた他の構造体/ユニットにアクセスし、何を生成するかを決定できると想定しています。リフレクションの使用に関する詳細情報: 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 は、Specman 6.1 ドキュメント#ifdefでの使用例であるにもかかわらず、内の import ステートメントが好きではありません。#ifdef

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 に答える