projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ラベルハッシュ表作成時にhash関数を使用するよう修正
[YACASL2.git]
/
include
/
assemble.h
diff --git
a/include/assemble.h
b/include/assemble.h
index
fddad63
..
6372e19
100644
(file)
--- a/
include/assemble.h
+++ b/
include/assemble.h
@@
-1,10
+1,10
@@
/* CASL IIの制限 */
enum {
/* CASL IIの制限 */
enum {
- LINESIZE = 1024, /* 行の最大文字数 */
- TOKENSIZE = 256, /* トークンの最大文字数 */
- LABELSIZE = 8, /* ラベルの最大文字数 */
+ LINESIZE = 1024,
/* 行の最大文字数 */
+ TOKENSIZE = 256,
/* トークンの最大文字数 */
+ LABELSIZE = 8,
/* ラベルの最大文字数 */
LABELTABSIZE = 256, /* ラベルの最大数 */
LABELTABSIZE = 256, /* ラベルの最大数 */
- OPDSIZE = 40 /* オペラントの最大数 */
+ OPDSIZE = 40
,
/* オペラントの最大数 */
};
/* 値を格納するポインタ */
};
/* 値を格納するポインタ */
@@
-13,6
+13,9
@@
extern WORD ptr;
/* リテラル(=付きの値)を格納するポインタ */
extern WORD lptr;
/* リテラル(=付きの値)を格納するポインタ */
extern WORD lptr;
+/* 他のプログラムで参照する入口名 */
+extern char *prog;
+
/* アセンブラ命令とマクロ命令を表す番号 */
typedef enum {
START = 01,
/* アセンブラ命令とマクロ命令を表す番号 */
typedef enum {
START = 01,
@@
-22,7
+25,7
@@
typedef enum {
IN = 011,
OUT = 012,
RPUSH = 013,
IN = 011,
OUT = 012,
RPUSH = 013,
- RPOP = 014
+ RPOP = 014
,
} CASLCMD;
/* アセンブラ命令とマクロ命令を表す配列 */
} CASLCMD;
/* アセンブラ命令とマクロ命令を表す配列 */
@@
-36,21
+39,25
@@
typedef struct {
/* ラベル表 */
typedef struct _LABELTAB {
struct _LABELTAB *next;
/* ラベル表 */
typedef struct _LABELTAB {
struct _LABELTAB *next;
- char *name;
+ char *prog;
+ char *label;
WORD adr;
} LABELTAB;
/* アセンブラが、1回目か、2回目か、を表す */
typedef enum {
FIRST = 0,
WORD adr;
} LABELTAB;
/* アセンブラが、1回目か、2回目か、を表す */
typedef enum {
FIRST = 0,
- SECOND = 1
+ SECOND = 1
,
} PASS;
} PASS;
-/* ラベル表からアドレスを検索する */
-WORD getlabel(const char *label);
+/* プログラム名とラベルに対応するハッシュ値を返す */
+unsigned labelhash(const char *prog, const char *label);
+
+/* プログラム名とラベルに対応するアドレスをラベル表から検索する */
+WORD getlabel(const char *prog, const char *label);
/* ラベルを表に追加する */
/* ラベルを表に追加する */
-bool addlabel(const char *label, WORD word);
+bool addlabel(const char *
prog, const char *
label, WORD word);
/* ラベル表を表示する */
void printlabel();
/* ラベル表を表示する */
void printlabel();
@@
-94,7
+101,7
@@
WORD gethex(const char *str);
/* アドレスを返す */
/* アドレスには、リテラル/10進定数/16進定数/アドレス定数が含まれる */
/* アドレスを返す */
/* アドレスには、リテラル/10進定数/16進定数/アドレス定数が含まれる */
-WORD getadr(const char *str, PASS pass);
+WORD getadr(const char *
prog, const char *
str, PASS pass);
/* 定数の前に等号(=)をつけて記述される、リテラルを返す */
/* リテラルには、10進定数/16進定数/文字定数が含まれる */
/* 定数の前に等号(=)をつけて記述される、リテラルを返す */
/* リテラルには、10進定数/16進定数/文字定数が含まれる */