CASLファイルのフォルダを変更
[YACASL2.git] / as / fe_tests / 2008_04 / Q09 / token.casl
diff --git a/as/fe_tests/2008_04/Q09/token.casl b/as/fe_tests/2008_04/Q09/token.casl
new file mode 100644 (file)
index 0000000..de57bca
--- /dev/null
@@ -0,0 +1,42 @@
+TOKEN   START
+        RPUSH
+        LD      GR3,=-1        ; 単語の処理中を示すフラグの初期化
+                               ;  0: 数字だけの単語を処理中である。
+                               ;  1: 英字を含む単語を処理中である。
+                               ; -1: 単語の処理中ではない。
+        LAD     GR1,-1,GR1
+LP      LAD     GR1,1,GR1
+        LD      GR4,0,GR1      ; 1文字を取り出す。
+        CPL     GR4,='.'       ; 終了判定
+        JZE     FIN 
+        CPL     GR4,=' '
+        JNZ     ALNUM
+        CALL    SETTKN
+        JUMP    LP
+ALNUM   LD      GR3,GR3        ; 単語の処理中?
+        JPL     LP             ;   英字を含む単語を処理中ならLPヘ
+        JZE     ACHK           ;   数字だけの単語を処理中ならACHKヘ
+        LD      GR3,=0
+        LD      GR6,GR1        ; 単語の先頭アドレスを退避
+ACHK    CPL     GR4,='A'       ; 検査対象文字は数字?
+        JMI     LP             ;   数字の場合,次の文字の取出しヘ
+        LD      GR3,=1         ;   英字の場合
+        JUMP    LP
+;
+FIN     CALL    SETTKN
+        LD      GR5,=-1
+        ST      GR5,0,GR2      ; 終了マークを格納
+        RPOP
+        RET
+;
+SETTKN  LD      GR3,GR3        ; 単語の処理中?
+        JMI     FIN2           ;   処理中でなければ何もしない。
+        ST      GR6,0,GR2      ; 単語の先頭アドレスを管理テーブルに格納
+        LD      GR5,GR1
+        SUBL    GR5,GR6        ; 単語の長さを計算
+        ST      GR5,1,GR2      ; 単語の長さを格納
+        ST      GR3,2,GR2      ; 単語の属性を格納
+        LD      GR3,=-1        ; 単語の処理中状態を解除
+        LAD     GR2,3,GR2 
+FIN2    RET
+        END