From: j8takagi Date: Tue, 26 Apr 2011 15:20:54 +0000 (+0900) Subject: トークン取得のルーチンを修正 X-Git-Tag: v0.1p42~1 X-Git-Url: https://j8takagi.net/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=80d4fc2d9a7022362c88cac0adbddd32ce7a3a62;p=YACASL2.git トークン取得のルーチンを修正 --- diff --git a/include/struct.h b/include/struct.h index e862786..05ff5f9 100644 --- a/include/struct.h +++ b/include/struct.h @@ -47,42 +47,37 @@ extern SYSTEM *sys; /** * COMET II 命令 - * 命令タイプは、オペランドにより6種類に分類 + * 命令タイプは、オペランドにより5種類に分類 */ typedef enum { /** - * オペランド数2または3。命令語長2 - * 第1オペランド: 汎用レジスタ - * 第2オペランド: アドレス - * 第3オペランド: 指標レジスタ + * オペランド数2または3 + * - 第1オペランド: 汎用レジスタ。必須 + * - 第2オペランド: アドレス。必須 + * - 第3オペランド: 指標レジスタとして用いる汎用レジスタ。任意 */ - R_ADR_X = 010, + R_ADR_X = 01, /** - * オペランド数2または3。。命令語長2 - * 第1オペランド: 汎用レジスタ - * 第2オペランド: アドレスに格納されている内容 - * 第3オペランド: 指標レジスタ + * オペランド数2 + * - 第1オペランド: 汎用レジスタ。必須 + * - 第2オペランド: 汎用レジスタ。必須 */ - R1_R2 = 020, + R1_R2 = 02, /** - * オペランド数1または2。命令語長1 - * 第1オペランド: アドレス - * 第2オペランド: 指標レジスタ + * オペランド数1または2 + * - 第1オペランド: アドレス。必須 + * - 第2オペランド: 指標レジスタとして用いる汎用レジスタ。任意 */ - ADR_X = 030, + ADR_X = 03, /** - * オペランド数1。命令語長1 - * 第1オペランド: 汎用レジスタ + * オペランド数1 + * - 第1オペランド: 汎用レジスタ。必須 */ - R_ = 040, + R_ = 04, /** - * オペランドなし。命令語長1 + * オペランドなし */ - NONE = 0, - /** - * COMET II命令以外 - */ - NOTCMD = 077, + NONE = 00, } CMDTYPE; /** diff --git a/src/token.c b/src/token.c index de29faf..dac982f 100644 --- a/src/token.c +++ b/src/token.c @@ -119,7 +119,7 @@ CMDLINE *linetok(const char *line) break; } } - if(*tokens != '\0') { + if(*tokens != '\n' && *tokens != '\0') { 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 */ } + FREE(cmdl); } else { /* 命令の取得 */ sepp = p + strcspn(p, " \t\n");