projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
make copyrightの修正
[YACASL2.git]
/
include
/
assemble.h
diff --git
a/include/assemble.h
b/include/assemble.h
index
aa2b599
..
3ab7a86
100644
(file)
--- a/
include/assemble.h
+++ b/
include/assemble.h
@@
-1,28
+1,19
@@
-#ifndef YACASL2_ASSEMBLE_INCLUDED
-#define YACASL2_ASSEMBLE_INCLUDED
+#ifndef YACASL2_ASSEMBLE_
H_
INCLUDED
+#define YACASL2_ASSEMBLE_
H_
INCLUDED
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include <stdbool.h>
#include <stdbool.h>
+#include <ctype.h>
+#include <assert.h>
+#include <errno.h>
+#include "cerr.h"
#include "struct.h"
#include "struct.h"
-#include "
word
.h"
+#include "
token
.h"
/**
/**
- * CASL IIの仕様
- */
-enum {
- LABELSIZE = 8, /**<ラベルの最大文字数 */
- OPDSIZE = 40, /**<オペラントの最大数。CASL IIシミュレータの制限 */
-};
-
-/**
- * YACASL2の制限
- */
-enum {
- LINESIZE = 1024, /**<行の最大文字数 */
- TOKENSIZE = 256, /**<トークンの最大文字数 */
-};
-
-/**
- * アセンブルモード
+ * @brief アセンブルモードを表すデータ型
*/
typedef struct {
bool src; /**<ソースを表示する場合はtrue */
*/
typedef struct {
bool src; /**<ソースを表示する場合はtrue */
@@
-32,10
+23,13
@@
typedef struct {
bool onlyassemble; /**<アセンブルだけを行う場合はtrue */
} ASMODE;
bool onlyassemble; /**<アセンブルだけを行う場合はtrue */
} ASMODE;
+/**
+ * @brief アセンブルモード: src, label, onlylabel, asdetail, onlyassemble
+ */
extern ASMODE asmode;
/**
extern ASMODE asmode;
/**
- *
アセンブル時の、現在およびリテラルのアドレスと入口名
+ *
@brief アセンブル時の現在およびリテラルのアドレスとプログラム入口名を表すデータ型
*/
typedef struct {
WORD ptr; /**<現在のアドレス */
*/
typedef struct {
WORD ptr; /**<現在のアドレス */
@@
-43,50
+37,13
@@
typedef struct {
char *prog; /**<他のプログラムで参照する入口名 */
} ASPTR;
char *prog; /**<他のプログラムで参照する入口名 */
} ASPTR;
-extern ASPTR *asptr;
-
-/**
- * アセンブラ命令を表す番号
- */
-typedef enum {
- START = 01,
- END = 02,
- DS = 03,
- DC = 04,
-} ASCMDID;
-
-/**
- * アセンブラ命令を表す配列
- */
-typedef struct {
- ASCMDID cmdid; /**<アセンブル命令のID */
- int opdc_min; /**<最小オペランド数 */
- int opdc_max; /**<最大オペランド数 */
- char *cmd; /**<コマンド名 */
-} ASCMD;
-
-/**
- * マクロ命令を表す番号
- */
-typedef enum {
- IN = 011,
- OUT = 012,
- RPUSH = 013,
- RPOP = 014,
-} MACROCMDID;
-
/**
/**
- *
マクロ命令を表す配列
+ *
@brief アセンブル時の、現在およびリテラルのアドレスとプログラム入口名: ptr, lptr, prog
*/
*/
-typedef struct {
- MACROCMDID cmdid; /**<マクロ命令のID */
- int opdc_min; /**<最小オペランド数 */
- int opdc_max; /**<最大オペランド数 */
- char *cmd; /**<コマンド名 */
-} MACROCMD;
+extern ASPTR *asptr;
/**
/**
- *
ラベル配列
+ *
@brief ラベル配列を表すデータ型
*/
typedef struct {
char *prog; /**<プログラム */
*/
typedef struct {
char *prog; /**<プログラム */
@@
-95,91
+52,107
@@
typedef struct {
} LABELARRAY;
/**
} LABELARRAY;
/**
- *
ラベル表
+ *
@brief ラベル表を表すデータ型
*/
typedef struct _LABELTAB {
struct _LABELTAB *next; /**<リスト次項目へのポインタ */
*/
typedef struct _LABELTAB {
struct _LABELTAB *next; /**<リスト次項目へのポインタ */
- char *prog; /**<プログラム名 */
- char *label; /**<ラベル名 */
- WORD adr; /**<アドレス */
+ LABELARRAY *label; /**<ラベル配列 */
} LABELTAB;
} LABELTAB;
+/**
+ * ラベル表のサイズ
+ */
enum {
enum {
- /**
- * ラベル表のサイズ
- */
- LABELTABSIZE = 251,
+ LABELTABSIZE = 251, /**<ラベル表のサイズ */
};
/**
};
/**
- *
アセンブラが、1回目か2回目か
+ *
@brief アセンブラが、1回目か2回目かを表す数値
*/
typedef enum {
*/
typedef enum {
- FIRST = 0,
- SECOND = 1,
+ FIRST = 0,
/**<アセンブラ1回目 */
+ SECOND = 1,
/**<アセンブラ2回目 */
} PASS;
/**
} PASS;
/**
- * プログラム名とラベルに対応するアドレスをラベル表から検索する
+ * @brief ラベルのエラーをエラーリストに追加する
+ *
+ * @return なし
*/
*/
-WORD getlabel(const char *prog, const char *label);
-
-/**
- * プログラム名、ラベル、アドレスをラベル表に追加する
- */
-bool addlabel(const char *prog, const char *label, WORD word);
+void addcerrlist_label();
/**
/**
- * ラベル表を表示する
+ * @brief プログラム名とラベルに対応するアドレスをラベル表から検索する
+ *
+ * @return プログラム名とラベルに対応するアドレス
+ *
+ * @param *prog プログラム名
+ * @param *label ラベル
*/
*/
-void printlabel();
-
-/**
- * ラベル表を解放する
- */
-void freelabel();
+WORD getlabel(const char *prog, const char *label);
/**
/**
- * オペランド
+ * @brief プログラム名、ラベル、アドレスをラベル表に追加する
+ *
+ * @return 追加に成功した時はtrue、失敗した時はfalse
+ *
+ * @param *prog プログラム名
+ * @param *label ラベル
+ * @param adr アドレス
*/
*/
-typedef struct {
- int opdc; /**<オペランド数 */
- char *opdv[OPDSIZE]; /**<オペランド配列 */
-} OPD;
+bool addlabel(const char *prog, const char *label, WORD adr);
/**
/**
- * 命令行
+ * @brief ラベル表を表示する
+ *
+ * @return なし
*/
*/
-typedef struct {
- char *label; /**<ラベル */
- char *cmd; /**<コマンド */
- OPD *opd; /**<オペランド */
-} CMDLINE;
+void printlabel();
/**
/**
- * トークン取得のエラーを追加
+ * @brief ラベル表を解放する
+ *
+ * @return なし
*/
*/
-void
addcerrlist_tok
();
+void
freelabel
();
/**
/**
- * 空白またはタブで区切られた1行から、トークンを取得する
+ * @brief アセンブルエラーをエラーリストに追加する
+ *
+ * @return なし
*/
*/
-
CMDLINE *linetok(const char *line
);
+
void addcerrlist_assemble(
);
/**
/**
- * アセンブルエラーをエラーリストに追加
+ * @brief 指定された名前のファイルをアセンブル\n
+ *
+ * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
+ *
+ * @return アセンブル完了時はtrue、エラー発生時はfalseを返す
+ *
+ * @param *file ファイル名
+ * @param pass アセンブラが何回目かを表す数
*/
*/
-
void addcerrlist_assemble(
);
+
bool assemblefile(const char *file, PASS pass
);
/**
/**
- * 指定された名前のファイルをアセンブル
- * 2回実行される
+ * @brief 指定された1つまたは複数のファイルを2回アセンブル
+ *
+ * @return アセンブル完了時はtrue、エラー発生時はfalseを返す
+ *
+ * @param filec アセンブルするファイルの数
+ * @param filev アセンブルするファイル名の配列
+ * @param adr アセンブル結果を格納するアドレス
*/
*/
-bool assemble(
const char *file, PASS pass
);
+bool assemble(
int filec, char *filev[], WORD adr
);
/**
/**
- * 引数で指定したファイルにアセンブル結果を書込
+ * @brief ファイルにアセンブル結果を書き込む
+ *
+ * @return なし
+ *
+ * @param *file ファイル名
*/
void outassemble(const char *file);
*/
void outassemble(const char *file);
-#endif
/* YACASL2_ASSEMBLE_INCLUDEDの終端 */
+#endif