projects
/
YACASL2.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
a26bbbf
)
トークン取得のルーチンを修正
author
j8takagi
<j8takagi@nifty.com>
Tue, 26 Apr 2011 15:20:54 +0000
(
00:20
+0900)
committer
j8takagi
<j8takagi@nifty.com>
Tue, 26 Apr 2011 15:20:54 +0000
(
00:20
+0900)
include/struct.h
patch
|
blob
|
history
src/token.c
patch
|
blob
|
history
diff --git
a/include/struct.h
b/include/struct.h
index
e862786
..
05ff5f9
100644
(file)
--- a/
include/struct.h
+++ b/
include/struct.h
@@
-47,42
+47,37
@@
extern SYSTEM *sys;
/**
* COMET II 命令
/**
* COMET II 命令
- * 命令タイプは、オペランドにより
6
種類に分類
+ * 命令タイプは、オペランドにより
5
種類に分類
*/
typedef enum {
/**
*/
typedef enum {
/**
- * オペランド数2または3
。命令語長2
- *
第1オペランド: 汎用レジスタ
- *
第2オペランド: アドレス
- *
第3オペランド: 指標レジスタ
+ * オペランド数2または3
+ *
- 第1オペランド: 汎用レジスタ。必須
+ *
- 第2オペランド: アドレス。必須
+ *
- 第3オペランド: 指標レジスタとして用いる汎用レジスタ。任意
*/
*/
- R_ADR_X = 01
0
,
+ R_ADR_X = 01,
/**
/**
- * オペランド数2または3。。命令語長2
- * 第1オペランド: 汎用レジスタ
- * 第2オペランド: アドレスに格納されている内容
- * 第3オペランド: 指標レジスタ
+ * オペランド数2
+ * - 第1オペランド: 汎用レジスタ。必須
+ * - 第2オペランド: 汎用レジスタ。必須
*/
*/
- R1_R2 = 02
0
,
+ R1_R2 = 02,
/**
/**
- * オペランド数1または2
。命令語長1
- *
第1オペランド: アドレス
- *
第2オペランド: 指標レジスタ
+ * オペランド数1または2
+ *
- 第1オペランド: アドレス。必須
+ *
- 第2オペランド: 指標レジスタとして用いる汎用レジスタ。任意
*/
*/
- ADR_X = 03
0
,
+ ADR_X = 03,
/**
/**
- *
オペランド数1。命令語長
1
- *
第1オペランド: 汎用レジスタ
+ *
オペランド数
1
+ *
- 第1オペランド: 汎用レジスタ。必須
*/
*/
- R_ = 04
0
,
+ R_ = 04,
/**
/**
- *
オペランドなし。命令語長1
+ *
オペランドなし
*/
*/
- NONE = 0,
- /**
- * COMET II命令以外
- */
- NOTCMD = 077,
+ NONE = 00,
} CMDTYPE;
/**
} CMDTYPE;
/**
diff --git
a/src/token.c
b/src/token.c
index
de29faf
..
dac982f
100644
(file)
--- a/
src/token.c
+++ b/
src/token.c
@@
-119,7
+119,7
@@
CMDLINE *linetok(const char *line)
break;
}
}
break;
}
}
- if(*tokens != '\0') {
+ if(*tokens != '\
n' && *tokens != '\
0') {
p = tokens;
cmdl = malloc_chk(sizeof(CMDLINE), "cmdl");
/* ラベルの取得。行の先頭が空白またはタブの場合、ラベルは空 */
p = tokens;
cmdl = malloc_chk(sizeof(CMDLINE), "cmdl");
/* ラベルの取得。行の先頭が空白またはタブの場合、ラベルは空 */
@@
-143,6
+143,7
@@
CMDLINE *linetok(const char *line)
if(cmdl->label != NULL) { /* ラベルが定義されていて命令がない場合はエラー */
setcerr(105, NULL); /* no command in the line */
}
if(cmdl->label != NULL) { /* ラベルが定義されていて命令がない場合はエラー */
setcerr(105, NULL); /* no command in the line */
}
+ FREE(cmdl);
} else {
/* 命令の取得 */
sepp = p + strcspn(p, " \t\n");
} else {
/* 命令の取得 */
sepp = p + strcspn(p, " \t\n");