亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? pl0.pas

?? 是編譯原理上PL0語言的源碼,歡迎大家來看
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
PROGRAM PL0(INPUT,OUTPUT,INPUT1,OUTPUT1);
  (*PL0 COMPILER WITH CODE GENERATION*)
LABEL
  99;
CONST
  AL=10;     (*LENGTH OF IDENTIFIERS*)
  NORW=14;   (*# OF RESERVED WORDS*)
  TXMAX=100; (*LENGTH OF IDENTIFIER TABLE*)
  NMAX=14;   (*MAX NUMBER OF DEGITS IN NUMBERS*)
  AMAX=2047; (*MAXIMUM ADDRESS*)
  LEVMAX=3;  (*MAX DEPTH OF BLOCK NESTING*)
  CXMAX=200; (*SIZE OF CODE ARRAY*)
TYPE
  SYMBOL=(NUL, IDENT, NUMBER, PLUS, MINUS, TIMES,
          SLASH, ODDSYM, EQL, NEQ, LSS, LEQ, GTR, GEQ,
          LPAREN, RPAREN, COMMA, SEMICOLON, PERIOD,
          BECOMES, BEGINSYM, ENDSYM, IFSYM, THENSYM,
          WHILESYM, WRITESYM, READSYM, DOSYM, CALLSYM,
          CONSTSYM, VARSYM, PROCSYM, PROGSYM);
  ALFA = PACKED ARRAY[1..AL] OF CHAR;
  OBJECTS = (CONSTANT, VARIABLE, PROCEDUR);
    (*WIRTH USED THE WORD "PROCEDURE" THERE,
       WHICH WON'T WORK!*)
  SYMSET = SET OF SYMBOL;
  FCT = ( LIT, OPR, LOD, STO, CAL, INT, JMP, JPC);
  INSTRUCTION = PACKED RECORD
                  F:FCT;       (*FUNCTION CODE*)
                  L:0..LEVMAX; (*LEVEL*)
                  A:0..AMAX;   (*DISPLACEMENT ADDR*)
                END;
        (* LIT O A -- LOAD CONSTANT A
           OPR 0 A -- EXECUTE OPR A
           LOD L A -- LOAD VARIABLE L,A
           STO L A -- STORE VARIABLE L,A
           CAL L A -- CALL PROCEDURE A AT LEVEL L
           INT 0 A -- INCREMET T-REGISTER BY A
           JMP 0 A -- JUMP TO A
           JPC 0 A -- JUMP CONDITIONAL TO A *)
VAR
  LISTSWITCH:BOOLEAN; (*TRUE SET LIST OBJECT CODE*)
  CH:CHAR;    (*LAST CHAR READ*)
  SYM:SYMBOL; (*LAST SYMBOL READ*)
  ID:ALFA;    (*LAST IDENTIFIER READ*)
  NUM:INTEGER;(*LAST NUMBER READ*)
  CC:INTEGER; (*CHARACTER COUNT*)
  LL:INTEGER; (*LINE LENGTH*)
  KK:INTEGER;
  CX:INTEGER; (*CODE ALLOCATION INDEX*)
  LINE:ARRAY[1..81] OF CHAR;
  A:ALFA;
  CODE:ARRAY[0..CXMAX] OF INSTRUCTION;
  WORD:ARRAY[1..NORW] OF ALFA;
  WSYM:ARRAY[1..NORW] OF SYMBOL;
  SSYM:ARRAY[' '..'^'] OF SYMBOL;
    (* WIRTH USES "ARRAY[CHAR]" HERE*)
  MNEMONIC:ARRAY[FCT] OF PACKED ARRAY[1..5] OF CHAR;
  DECLBEGSYS, STATBEGSYS, FACBEGSYS:SYMSET;
  TABLE: ARRAY[0..TXMAX] OF
           RECORD
             NAME:ALFA;
             CASE KIND:OBJECTS OF
               CONSTANT:(VAL:INTEGER);
               VARIABLE,
               PROCEDUR:(LEVEL,ADR,SIZE:INTEGER)
                  (* "SIZE" LACKING IN ORIGINAL.
                     I THINK IT BELONGS HERE *)
             END;
  INPUT1,OUTPUT1:TEXT;
   (*FOR Turbo Pascal NEED FILE VARIABLES*)
  SourceF:STRING[10];
  YN:CHAR{ALFA};  (* 'LIST OBJECT CODE? '*)
  ERR:INTEGER;    (*NOT DECLARED IN ORIGINAL*)

PROCEDURE ERROR(N:INTEGER);
  BEGIN
    WRITELN('****',' ':CC-1,'^',N:2);
    WRITELN(OUTPUT1,'****',' ':CC-1,'^',N:2);
    ERR:=ERR+1
     (*I THINK THIS IS THE WAY IT IS USED*)
  END (*ERROR*);

PROCEDURE GETSYM;
 VAR
   I,J,K:INTEGER;

 PROCEDURE GETCH;
  BEGIN
   IF CC=LL THEN BEGIN
     IF EOF(INPUT1) THEN BEGIN
       WRITE('PROGRAM INCOMPLETE');
       WRITE(OUTPUT1,'PROGRAM INCOMPLETE'); {GOTO 99}
     END;
     LL:=0; CC:=0; WRITE(CX:4,' ');
     WRITE(OUTPUT1,CX:4,' ');
     WHILE NOT EOLN(INPUT1) DO BEGIN
       LL:=LL+1; READ(INPUT1,CH); WRITE(CH);
       WRITE(OUTPUT1,CH); LINE[LL]:=CH
     END;
     WRITELN; WRITELN(OUTPUT1);
     LL:=LL+1; READLN(INPUT1); LINE[LL]:=#13;
   END;
   CC:=CC+1; CH:=LINE[CC]
  END (*GETCH*);

 BEGIN (*GETSYM*)
   WHILE CH<=' ' DO GETCH;
   IF CH IN ['A'..'Z'] THEN BEGIN (*ID OR RESERVED WORD*)
     K:=0;
     REPEAT
       IF K<AL THEN BEGIN
         K:=K+1; A[K]:=CH
       END;
       GETCH
     UNTIL NOT(CH IN ['A'..'Z','0'..'9']);
     IF K>=KK THEN KK:=K
     ELSE REPEAT
            A[KK]:=' '; KK:=KK-1
          UNTIL KK=K;
     ID:=A; I:=1; J:=NORW;
     REPEAT
       K:=(I+J) DIV 2;
       IF ID<=WORD[K] THEN J:=K-1;
       IF ID>=WORD[K] THEN I:=K+1
     UNTIL I>J;
     IF I-1 > J THEN SYM:=WSYM[K]
     ELSE SYM:=IDENT
   END
   ELSE
     IF CH IN ['0'..'9'] THEN BEGIN (*NUMBER*)
       K:=0; NUM:=0; SYM:=NUMBER;
       REPEAT
         NUM:=10*NUM+(ORD(CH)-ORD('0'));
         K:=K+1; GETCH
       UNTIL NOT(CH IN ['0'..'9']);
       IF K>NMAX THEN ERROR(30)
     END
     ELSE
       IF CH=':' THEN BEGIN
         GETCH;
         IF CH='=' THEN BEGIN
           SYM:=BECOMES; GETCH
         END
         ELSE SYM:=NUL;
       END
       ELSE (*THE FOLLOWING TWO CHECK WERE ADDED
              BECAUSE ASCII DOES NOT HAVE A
              SINGLE CHARACTER FOR <= OR >=*)
         IF CH='<' THEN BEGIN
           GETCH;
           IF CH='=' THEN BEGIN
             SYM:=LEQ; GETCH
           END
           ELSE SYM:=LSS
         END
         ELSE
           IF CH='>' THEN BEGIN
             GETCH;
             IF CH='=' THEN BEGIN
               SYM:=GEQ; GETCH
             END
             ELSE SYM:=GTR
           END
           ELSE BEGIN
             SYM:=SSYM[CH]; GETCH
           END
 END (*GETSYM*);

PROCEDURE GEN(X:FCT; Y,Z:INTEGER);
 BEGIN
   IF CX>CXMAX THEN BEGIN
     WRITE('PROGRAM TOO LONG');
     WRITE(OUTPUT1,'PROGRAM TOO LONG'); {GOTO 99}
   END;
   WITH CODE[CX] DO BEGIN
     F:=X; L:=Y; A:=Z
   END;
   CX:=CX+1
 END (*GEN*);

PROCEDURE TEST(S1,S2:SYMSET; N:INTEGER);
 BEGIN
   IF NOT(SYM IN S1) THEN BEGIN
     ERROR(N); S1:=S1+S2;
     WHILE NOT(SYM IN S1) DO GETSYM
   END
 END  (*TEST*) ;

PROCEDURE BLOCK(LEV,TX:INTEGER; FSYS:SYMSET);
 VAR
   DX :INTEGER;  (*DATA ALLOCATION INDEX*)
   TX0:INTEGER;  (*INITIAL TABLE INDEX*)
   CX0:INTEGER;  (*INITIAL CODE INDEX*)

 PROCEDURE ENTER(K:OBJECTS);
   BEGIN (*ENTER OBJECT INTO TABLE*)
     TX:=TX+1;
     WITH TABLE[TX] DO BEGIN
       NAME:=ID;KIND:=K;
       CASE K OF
         CONSTANT: BEGIN
             IF NUM>AMAX THEN BEGIN
               ERROR(31); NUM:=0
             END;
             VAL:=NUM
           END;
         VARIABLE: BEGIN
             LEVEL:=LEV; ADR:=DX; DX:=DX+1
           END;
         PROCEDUR:  LEVEL:=LEV
       END
     END
   END(*ENTER*);

 FUNCTION POSITION(ID:ALFA):INTEGER;
  VAR
    I:INTEGER;
  BEGIN (*FIND IDENTIFIER IN TABLE*)
    TABLE[0].NAME:=ID; I:=TX;
    WHILE TABLE[I].NAME<>ID DO I:=I-1;
    POSITION:=I
  END (*POSITION*);

 PROCEDURE CONSTDECLARATION;
   BEGIN
    IF SYM=IDENT THEN BEGIN
      GETSYM;
      IF SYM IN [EQL,BECOMES] THEN BEGIN
        IF SYM = BECOMES THEN ERROR(1);
        GETSYM;
        IF SYM=NUMBER THEN BEGIN
          ENTER(CONSTANT); GETSYM
        END
        ELSE ERROR(2)
      END
      ELSE ERROR(3)
    END
    ELSE ERROR(4)
   END (*CONSTDECLARATION*);

 PROCEDURE VARDECLARATION;
   BEGIN
     IF SYM=IDENT THEN BEGIN
       ENTER(VARIABLE); GETSYM
     END
     ELSE ERROR(4)
   END (*VARDECLARATION*);

 PROCEDURE LISTCODE;
   VAR
     I:INTEGER;
   BEGIN (*LIST CODE GENERATED FOR THIS BLOCK*)
     IF LISTSWITCH THEN
       FOR I:= CX0 TO CX-1 DO
         WITH CODE[I] DO BEGIN
           WRITELN(I:4,MNEMONIC[F]:7,L:2,A:4);
           WRITELN(OUTPUT1,I:4,MNEMONIC[F]:7,L:2,A:4)
         END
   END (*LISTCODE*);

 PROCEDURE STATEMENT(FSYS:SYMSET);
  VAR
   I,CX1,CX2:INTEGER;
  PROCEDURE EXPRESSION(FSYS:SYMSET);
   VAR
    ADDOP:SYMBOL;

   PROCEDURE TERM(FSYS:SYMSET);
    VAR
     MULOP:SYMBOL;
    PROCEDURE FACTOR(FSYS:SYMSET);
     VAR
      I:INTEGER;
     BEGIN
       TEST(FACBEGSYS,FSYS,24);
       WHILE SYM IN FACBEGSYS DO BEGIN
         IF SYM=IDENT THEN BEGIN
           I:=POSITION(ID);
           IF I=0 THEN ERROR(11)
           ELSE
             WITH TABLE[I] DO
               CASE KIND OF
                 CONSTANT:GEN(LIT,0,VAL);
                 VARIABLE:GEN(LOD,LEV-LEVEL,ADR);
                 PROCEDUR:ERROR(21)
               END;
           GETSYM
         END
         ELSE
           IF SYM=NUMBER THEN BEGIN
             IF NUM>AMAX THEN BEGIN
               ERROR(31); NUM:=0
             END;
             GEN(LIT,0,NUM); GETSYM
           END
           ELSE
             IF SYM=LPAREN THEN BEGIN
               GETSYM; EXPRESSION([RPAREN]+FSYS);
               IF SYM=RPAREN THEN GETSYM
               ELSE ERROR(22)
             END;
         TEST(FSYS,FACBEGSYS,23)
       END
     END(*FACTOR*);

   BEGIN (*TERM*)
     FACTOR(FSYS+[TIMES,SLASH]);
     WHILE SYM IN [TIMES,SLASH] DO BEGIN
       MULOP:=SYM;GETSYM;FACTOR(FSYS+[TIMES,SLASH]);
       IF MULOP= TIMES THEN GEN(OPR,0,4)
       ELSE GEN(OPR,0,5)
     END
   END (*TERM*);

  BEGIN (*EXPRESSION*)
    IF SYM IN [PLUS,MINUS] THEN BEGIN
      ADDOP:=SYM; GETSYM; TERM(FSYS+[PLUS,MINUS]);
      IF ADDOP=MINUS THEN GEN(OPR,0,1)
    END
    ELSE TERM(FSYS+[PLUS,MINUS]);
    WHILE SYM IN [PLUS,MINUS] DO BEGIN
      ADDOP:=SYM; GETSYM; TERM(FSYS+[PLUS,MINUS]);
      IF ADDOP = PLUS THEN GEN(OPR,0,2)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
老司机午夜精品| 国产精品美日韩| 欧美性猛交xxxx黑人交| 波多野结衣在线一区| 激情综合网最新| 久久电影国产免费久久电影| 日韩不卡一二三区| 美女一区二区在线观看| 美女精品一区二区| 麻豆精品蜜桃视频网站| 精品一区二区久久| 国产馆精品极品| 成人性生交大片免费看中文网站| 成人97人人超碰人人99| 色伊人久久综合中文字幕| 91蜜桃婷婷狠狠久久综合9色| 色88888久久久久久影院野外| 在线观看免费一区| 制服丝袜激情欧洲亚洲| 久久女同互慰一区二区三区| 国产精品毛片高清在线完整版| 亚洲视频精选在线| 亚洲综合在线视频| 理论片日本一区| 成人中文字幕电影| 欧美日韩国产另类一区| 久久久久久久久99精品| 亚洲乱码国产乱码精品精98午夜 | 欧美中文字幕亚洲一区二区va在线| 91在线观看免费视频| 欧美人xxxx| 国产亚洲人成网站| 亚洲一区二区三区四区五区黄| 日韩电影在线免费观看| 成人福利视频网站| 欧美一区二区三区免费视频| 国产日韩精品视频一区| 亚洲成人在线网站| 国产成人免费视频网站| 欧美日韩国产天堂| 中文字幕一区二区三区在线不卡| 亚洲福利一二三区| 成人中文字幕在线| 精品久久久久久无| 亚洲一区二区三区自拍| 国产成人av资源| 欧美一区二区三区小说| 亚洲天堂免费在线观看视频| 精一区二区三区| 欧美视频三区在线播放| 国产精品国产三级国产普通话蜜臀 | 精品成人a区在线观看| 国产精品高潮呻吟久久| 国产在线观看免费一区| 欧美高清视频www夜色资源网| 一区视频在线播放| 国内精品视频一区二区三区八戒| 精品视频在线视频| 亚洲精品视频在线观看网站| 岛国av在线一区| 久久久久久久精| 久久成人综合网| 欧美精品乱码久久久久久| 一区二区三区蜜桃| 色综合天天综合网天天看片| 久久亚洲二区三区| 首页国产欧美久久| 欧美三区免费完整视频在线观看| 亚洲欧洲一区二区在线播放| 国产精品456露脸| 亚洲精品一区二区精华| 美女一区二区三区| 精品少妇一区二区三区日产乱码| 亚洲成人在线观看视频| 欧美三级在线视频| 午夜亚洲国产au精品一区二区| 在线免费精品视频| 亚洲成av人片一区二区三区| 欧美性猛交一区二区三区精品| 一区二区三区加勒比av| 欧美日韩一区二区欧美激情| 亚洲另类在线视频| 欧美亚洲图片小说| 午夜免费欧美电影| 日韩欧美国产成人一区二区| 老司机精品视频导航| 久久午夜免费电影| 国产成人精品亚洲日本在线桃色| 国产日本亚洲高清| 91亚洲精品乱码久久久久久蜜桃 | 日韩一区二区在线播放| 久久成人综合网| 国产女人水真多18毛片18精品视频| 国产大陆a不卡| 亚洲丝袜另类动漫二区| 欧美三级欧美一级| 国产综合成人久久大片91| 亚洲国产精品99久久久久久久久| 99精品视频在线观看| 亚洲国产毛片aaaaa无费看| 欧美一区二区视频在线观看2020| 久久66热re国产| 136国产福利精品导航| 91精品国产综合久久小美女| 国产毛片精品一区| 亚洲一区二区三区四区在线免费观看 | 欧美一级在线免费| 国产福利一区二区三区视频 | 一区二区高清在线| 精品美女在线观看| 色先锋aa成人| 精品一区二区三区香蕉蜜桃| 亚洲欧洲无码一区二区三区| 欧美一区二区人人喊爽| 成人av在线影院| 美国十次综合导航| 一区二区三区中文字幕| 精品理论电影在线| 色8久久精品久久久久久蜜| 精品影院一区二区久久久| 亚洲欧美国产毛片在线| 亚洲精品在线免费观看视频| 91黄色免费看| 不卡在线观看av| 国产永久精品大片wwwapp| 午夜精品免费在线观看| 亚洲欧美日韩国产综合| 久久久夜色精品亚洲| 欧美一区二区美女| 在线欧美小视频| av在线播放成人| 高清shemale亚洲人妖| 乱中年女人伦av一区二区| 一区二区三区久久久| 18成人在线视频| 欧美激情一区二区三区不卡| 精品精品欲导航| 欧美一区二区三区在| 欧美日韩午夜影院| 欧美亚洲一区二区三区四区| 一本到一区二区三区| 99国产欧美另类久久久精品| 粉嫩嫩av羞羞动漫久久久| 国产美女精品在线| 国内成+人亚洲+欧美+综合在线 | 波多野结衣中文字幕一区 | 久久精品72免费观看| 婷婷中文字幕一区三区| 亚洲午夜成aⅴ人片| 亚洲综合在线视频| 亚洲国产毛片aaaaa无费看| 亚洲欧美日韩人成在线播放| 亚洲特黄一级片| 亚洲欧美色图小说| 亚洲国产另类精品专区| 午夜激情综合网| 日本视频一区二区| 老司机精品视频线观看86| 久久精品国产精品青草| 国产精品综合在线视频| 成人福利电影精品一区二区在线观看| 国产成人精品aa毛片| 成人av电影免费观看| 99久免费精品视频在线观看 | 精品一区二区三区欧美| 精品一区二区三区免费视频| 国产精品99久久久久| 成人激情综合网站| 91年精品国产| 欧美伊人久久久久久久久影院| 666欧美在线视频| 精品乱人伦小说| 国产精品久久久久久久蜜臀 | 成人伦理片在线| 欧美在线观看视频一区二区三区 | 91一区二区在线观看| 欧美日韩国产系列| 久久久噜噜噜久久中文字幕色伊伊| 国产精品少妇自拍| 午夜电影一区二区| 国产精品1区2区3区| 色嗨嗨av一区二区三区| 欧美tk—视频vk| 日韩毛片视频在线看| 日韩福利视频网| 99国产精品久久久久久久久久| 欧美日韩一卡二卡三卡| 国产亚洲综合av| 首页欧美精品中文字幕| 成人手机在线视频| 制服丝袜av成人在线看| 亚洲国产精品成人综合| 日韩高清不卡一区二区| 91丨九色丨黑人外教| 精品国产欧美一区二区| 亚洲高清免费一级二级三级| 国产99久久久国产精品| 欧美精品aⅴ在线视频| 国产精品久久久久久久久快鸭| 日韩电影一区二区三区四区|