projects
/
YACASL2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Doxygenドキュメントの修正
[YACASL2.git]
/
include
/
assemble.h
diff --git
a/include/assemble.h
b/include/assemble.h
index
a878058
..
154f8e1
100644
(file)
--- a/
include/assemble.h
+++ b/
include/assemble.h
@@
-1,28
+1,23
@@
#ifndef YACASL2_ASSEMBLE_INCLUDED
#define YACASL2_ASSEMBLE_INCLUDED
#ifndef YACASL2_ASSEMBLE_INCLUDED
#define YACASL2_ASSEMBLE_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 "cmem.h"
+#include "exec.h"
+#include "hash.h"
#include "struct.h"
#include "word.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,64
+27,27
@@
typedef struct {
bool onlyassemble; /**<アセンブルだけを行う場合はtrue */
} ASMODE;
bool onlyassemble; /**<アセンブルだけを行う場合はtrue */
} ASMODE;
-extern ASMODE asmode;
-
/**
/**
- *
アセンブルのプロパティ
+ *
@brief アセンブルモード: src, label, onlylabel, asdetail, onlyassemble
*/
*/
-typedef struct {
- WORD ptr; /**<現在のポインタ */
- WORD lptr; /**<リテラル(=付きの値)を格納するポインタ */
- char *prog; /**<他のプログラムで参照する入口名 */
-} ASPROP;
+extern ASMODE asmode;
/**
/**
- *
アセンブルのプロパティ: ptr, lptr, *prog
+ *
@brief アセンブル時の現在およびリテラルのアドレスとプログラム入口名を表すデータ型
*/
*/
-extern ASPROP *asprop;
-
-/**
- * アセンブラ命令を表す番号
- */
-typedef enum {
- START = 01,
- END = 02,
- DS = 03,
- DC = 04,
-} ASCMDID;
-
-/**
- * アセンブラ命令を表す配列
- */
typedef struct {
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;
+ WORD ptr; /**<現在のアドレス */
+ WORD lptr; /**<リテラル(=付きの値)のアドレス */
+ char *prog; /**<他のプログラムで参照する入口名 */
+} ASPTR;
/**
/**
- *
マクロ命令を表す配列
+ *
@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; /**<プログラム */
@@
-98,80
+56,106
@@
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
);
+
void addcerrlist_label(
);
/**
/**
- * プログラム名、ラベル、アドレスをラベル表に追加する
+ * @brief プログラム名とラベルに対応するアドレスをラベル表から検索する
+ *
+ * @return プログラム名とラベルに対応するアドレス
+ *
+ * @param *prog プログラム名
+ * @param *label ラベル
*/
*/
-
bool addlabel(const char *prog, const char *label, WORD word
);
+
WORD getlabel(const char *prog, const char *label
);
/**
/**
- * ラベル表を表示する
+ * @brief プログラム名、ラベル、アドレスをラベル表に追加する
+ *
+ * @return 追加に成功した時はtrue、失敗した時はfalse
+ *
+ * @param *prog プログラム名
+ * @param *label ラベル
+ * @param adr アドレス
*/
*/
-
void printlabel(
);
+
bool addlabel(const char *prog, const char *label, WORD adr
);
/**
/**
- * ラベル表を解放する
+ * @brief ラベル表を表示する
+ *
+ * @return なし
*/
*/
-void
free
label();
+void
print
label();
/**
/**
- * オペランド
+ * @brief ラベル表を解放する
+ *
+ * @return なし
*/
*/
-typedef struct {
- int opdc; /**<オペランド数 */
- char *opdv[OPDSIZE]; /**<オペランド配列 */
-} OPD;
+void freelabel();
/**
/**
- * 命令行
+ * @brief アセンブルエラーをエラーリストに追加する
+ *
+ * @return なし
*/
*/
-typedef struct {
- char *label; /**<ラベル */
- char *cmd; /**<コマンド */
- OPD *opd; /**<オペランド */
-} CMDLINE;
+void addcerrlist_assemble();
/**
/**
- * 空白またはタブで区切られた1行から、トークンを取得する
+ * @brief 指定された名前のファイルをアセンブル\n
+ *
+ * 1回目ではラベルを登録し、2回目ではラベルからアドレスを読み込む
+ *
+ * @return アセンブル完了時はtrue、エラー発生時はfalseを返す
+ *
+ * @param *file ファイル名
+ * @param pass アセンブラが何回目かを表す数
*/
*/
-
CMDLINE *linetok(const char *line
);
+
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);