-1

私はプログラミング言語のインタープリターを作成しており、スタックに取り組んでいますが、複数のデータ型を含めることができる動的構造の簡単な解決策を見つけることができませんでした。int、long、string など、複数のデータ型を構造体に格納できる必要があります。

4

2 に答える 2

1

このようなデータ構造を構築する比較的簡単な方法の 1 つはunion、次のように を使用することです。

union AnyType {
    int int_val;
    long long long_val;
    float float_val;
    double int_val;
    char char_val;
    char *char_prt;
};

ただし、この構造体のサイズは最大のデータ型のサイズと等しいため、これは最も経済的ではない可能性があります。より良いアプローチは、スタックに「生の」メモリ チャンクを使用し、その部分をスタック上の要素に動的に分配することです。ただし、アクセスが大幅に遅くなったり実行時エラーが発生したりするオフセットにマルチバイト データを配置しないように、データのアラインメントに注意を払う必要があります。

于 2013-10-20T19:43:51.597 に答える
0

ユニオンを使用できます:

union someUnion
{
  int a;
  long int b;
  char *string;
  //...any other needed type 
}

詳細については、このリンクをご覧ください。Union は、yacc (bison) や lex などのインタプリタやコンパイラの実装でよく使用されます。ところで、それらをチェックすることができます。これらは、インタープリターのコーディングを大幅に簡素化できます。

于 2013-10-20T19:43:06.313 に答える