view tl1trans/tl1token.tl1 @ 6:1896f63eedc1

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Wed, 04 Nov 2020 17:38:45 +0900
parents e66321b51bb5
children c95d28c5aaf2
line wrap: on
line source

%
%
%
%
PROC RESERVE
BEGIN
    WRITE(3:$30,"PPROC");
    WRRIE(3:$31,"FUNC");
    WRITE(3:$32,"VAR");
    WRITE(3:$33,:ARRAY");
    WRITE(3:$34,"BEGIN");
    WRITE(3:$35,";");
    WRITE(3:$36,"[");
    WRITE(3:$37,"(");
    WRITE(3:$38,"END");
    WRITE(3:$39,"=" );
    WRITE(3:$3A,"]");
    WRITE(3:$3B,")");
    WRITE(3:$3C,",");
    WRITE(3:$3D,":");
    WRITE(3:$3E,";");
    WRITE(3:$50,"STOP"  );
    WRITE(3:$51,"RETURN");
    WRITE(3:$55,"IF");
    WRITE(3:$65,"THEN");
    WRITE(3:$53,"FOR"  );
    WRITE(3:$61,"TO");
    WRITE(3:$52,"REPEAT");
    WRITE(3:$60,"UNTIL");
    WRITE(3:$54,"WHILE");
    WRITE(3:$64,"DO");
    WRITE(3:$56,"CASE");
    WRITE(3:$66,"OF"  );
    WRITE(3:$67,"ELSE");
    WRITE(3:$57,"WRITE");
    WRITE(3:$69,"ASCII"  );
    WRITE(3:$6A,"SPACE");
    WRITE(3:$68,"CRLF"  );
    WRITE(3:$6C,"\"");
    WRITE(3:$8B,"+");
    WRITE(3:$80,"-");
    WRITE(3:$8E,"*"  );
    WRITE(3:$8F,"/");
    WRITE(3:$82,".SBC.");
    WRITE(3:$84,".AND.");
    WRITE(3:$88,".EOR.");
    WRITE(3:$89,".ADC.");
    WRITE(3:$8A,".OR.");
    WRITE(3:$22,">"  );
    WRITE(3:$25,"<");
    WRITE(3:$26,"#");
    WRITE(3:$27,"=" );
    WRITE(3:$2D,".LT.");
    WRITE(3:$2E,".GT.");
    WRITE(3:$40,"NEG");
    WRITE(3:$43,"NOT");
    WRITE(3:$43,"COM");
    WRITE(3:$44,"LSR");
    WRITE(3:$46,"ROR");
    WRITE(3:$47,"ASR");
    WRITE(3:$48,"ASL");
    WRITE(3:$49,"ROL");
    WRITE(3:$06,"MEM");
    WRITE(3:$A0,"TRUE");
    WRITE(3:$A1,"FALSE");
    WRITE(3:$16,"MHIGH");
    WRITE(3:$17,"MOD");
    WRITE(3:$70,"RND");
    WRITE(3:$71,"GET");
    WRITE(3:$72,"READ");
    WRITE(3:$73 "RETRUN");
    WRITE(3:$74 "OTHERWISE");
    WRITE(3:$FF "");  % delimitor
END

FUNC TOKEN
VAR C,KIND,VALUE
BEGIN
  C:=GET(0)
  DO {
    TOKEN()
  } WHILE(C=255)
END

FUNC
TOKEN()
VAR D
ARRAY W(8)
BEGIN
    WHILE (C<'%'+1) DO BEGIN       % comment 
        DO BEGIN
           C:=GET(0)
        END WHILE(C # 0)
        C:=GET(0)
    END
    IF('0'<C+1 && C<'9'+1) {     %  Decimal 
        VALUE := C-'0';
        DO {
           C:=GET(0)
           IF(('0'<C+1).AND.(C<='9')) THEN
                VALUE := VALUE*10 + (C - '0')
        } WHILE(C # 0)
        RETURN '0'
    } ELSE IF ('$'=C) {    %  hex *
    } ELSE IF ('\''=C) {    %  ascii char *
    } ELSE IF ('"'=C) {     %  string *
    } ELSE IF (('A'<C+1).AND.(c<'Z'+1)) {    % name 
        FOR I:=0 TO 8 DO {
          IF  (('A'<C+1).AND.(c<'Z'+1)) {  
             W[I] := C ; I:=I+1;
          }
        }
        W[I]:=0;
        SEEK(3:0); 
        IF (FIND(3:W)) THEN {
        } ELSE {
           WRITE(3:IDTOP,W);  % register new id
           IDTOP:=IDTOP+1;
        }

        % reserved word 
        % proc
        % func
        % scalar var
        % array  var
        RETURN 'V'
    } ELSE {
        D:=C ; C:=GET(0)
        RETURN D
    }
END