snxc/ヘッダ(snxc.h)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[SN/X付属コンパイラの解読]]
*ヘッダ(snxc.h) [#e6d1537d]
snxcコンパイラで使用される構造体などの情報が定義されています。
----
#contents
**nodeType [#ue40ec96]
typedef enum { typeCon, typeId, typeOpr } nodeType;
プログラムコードの文を以下の3つの種類に分けて認識させます。
|タイプ|意味|
|typeCon|数字[0-9]の並び|
|typeId|変数[a-z]|
|typeOpr|命令の種類(+,-,for,ifなど)|
**Const構造体 [#e097e03c]
/* constants */
typedef struct {
nodeType type; /* type of node */
int value; /* value of constant */
} Const;
typeConであるとき、Const構造体が参照されます。~
Const構造体は内部に変数のvalueを持ち、値の情報を格納しています。
**Ident構造体 [#w4e2e719]
/* identifiers */
typedef struct {
nodeType type; /* type of node */
int i; /* subscript to ident array */
} Ident;
typeIdであるとき、Ident構造体が参照されます。~
Ident構造体は内部に変数のiを持ち、変数の番号を格納しています。~
~
変数の名前には[a-z]の1文字が使用可能なので、それに対応する数字を格納しています。
**Operator構造体 [#r46ba90b]
/* operators */
typedef struct {
nodeType type; /* type of node */
int oper; /* operator */
int nops; /* number of operands */
union PnodeTag *op[1]; /* operands (expandable) */
} Operator;
typeOprであるとき、Operator構造体が参照されます。~
Operator構造体は内部に変数のoper, nopsを持ち、さらにnops個だけオペランドの子ノードopを格納しています。~
operには命令の種類(オペレータ)を、nopsには子に含まれるオペランドの数を格納しています。
これはPnodeTag構造体になりますが、実体はPnode構造体と同じです。
**Pnode構造体 [#d0963805]
typedef union PnodeTag {
nodeType type; /* type of node */
Const con; /* constants */
Ident id; /* identifiers */
Operator opr; /* operators */
} Pnode;
Pnode構造体はtypeにノードの識別コード(typeCon, typeId, typeOpr)を持っています。~
識別コードに応じた構造体が参照可能で、参照先のそれぞれの構造体の情報を格納しています。~
~
このように、typeCon, typeId, typeOprの3つのを構造体をPnodeで連結して、プログラムコードをツリー状の構成として表現しています。
**シンボルテーブル [#r27bc724]
extern int sym[65536];
終了行:
[[SN/X付属コンパイラの解読]]
*ヘッダ(snxc.h) [#e6d1537d]
snxcコンパイラで使用される構造体などの情報が定義されています。
----
#contents
**nodeType [#ue40ec96]
typedef enum { typeCon, typeId, typeOpr } nodeType;
プログラムコードの文を以下の3つの種類に分けて認識させます。
|タイプ|意味|
|typeCon|数字[0-9]の並び|
|typeId|変数[a-z]|
|typeOpr|命令の種類(+,-,for,ifなど)|
**Const構造体 [#e097e03c]
/* constants */
typedef struct {
nodeType type; /* type of node */
int value; /* value of constant */
} Const;
typeConであるとき、Const構造体が参照されます。~
Const構造体は内部に変数のvalueを持ち、値の情報を格納しています。
**Ident構造体 [#w4e2e719]
/* identifiers */
typedef struct {
nodeType type; /* type of node */
int i; /* subscript to ident array */
} Ident;
typeIdであるとき、Ident構造体が参照されます。~
Ident構造体は内部に変数のiを持ち、変数の番号を格納しています。~
~
変数の名前には[a-z]の1文字が使用可能なので、それに対応する数字を格納しています。
**Operator構造体 [#r46ba90b]
/* operators */
typedef struct {
nodeType type; /* type of node */
int oper; /* operator */
int nops; /* number of operands */
union PnodeTag *op[1]; /* operands (expandable) */
} Operator;
typeOprであるとき、Operator構造体が参照されます。~
Operator構造体は内部に変数のoper, nopsを持ち、さらにnops個だけオペランドの子ノードopを格納しています。~
operには命令の種類(オペレータ)を、nopsには子に含まれるオペランドの数を格納しています。
これはPnodeTag構造体になりますが、実体はPnode構造体と同じです。
**Pnode構造体 [#d0963805]
typedef union PnodeTag {
nodeType type; /* type of node */
Const con; /* constants */
Ident id; /* identifiers */
Operator opr; /* operators */
} Pnode;
Pnode構造体はtypeにノードの識別コード(typeCon, typeId, typeOpr)を持っています。~
識別コードに応じた構造体が参照可能で、参照先のそれぞれの構造体の情報を格納しています。~
~
このように、typeCon, typeId, typeOprの3つのを構造体をPnodeで連結して、プログラムコードをツリー状の構成として表現しています。
**シンボルテーブル [#r27bc724]
extern int sym[65536];
ページ名: