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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? pl0-pas.txt.pas

?? Pascal語言寫的擴(kuò)充PL0文法編譯器
?? PAS
?? 第 1 頁 / 共 3 頁
字號(hào):
{ Pascal-S from N Wirth's paper 'Pascal-S: a subset and its implementation'
  which is most easily found in the book 'Pascal: the language and its
  implementation' edited by Barron. You might also like to look at
  'Principles of concurrent programming' by Ben-Ari (the first edition)
  which contains a munged version of Pascal-S that supports some
  concurrency.}

{ This version of Pascal-S was originally fetched from csvax.cs.caltech.edu
  where it lived in directory /jan. I believe that it was set up by Jan van
  de Snepscheut. I don't know anything else about its provenance. I modified
  the program to suit Turbo Pascal version 5.5 as detailed in the next
  comment. Jan's fixes to the published program are detailed in the comment
  after that.

                             Adrian Johnstone, 22 March 1995
                             adrian@dcs.rhbnc.ac.uk
}

{For Turbo Pascal:
   changed string to sstring
   changed halt to hhalt
   changed getch to read from infile instead of stdin and added file assign
   statements to mainline routine.
   removed label 99:
   changed 'goto 99' to halt;
   added chr(10) and chr(13) to list of throw-aways in getsym
}


{ line 295 (counting from 1 starting at program PascalS) is
                                  gen1(mulc, ttab[t].size); gen0(add)
  whereas the version printed in the book accidentally reads
                                  gen1(mulc, ttab[t].size)
  the present version also implements boolean negation

  the procedure funcdeclaration in the version printed in the book is
  erroneous. The first line on page 376 in the book should read
                                  if lev>1 then dx:=-1
  the last line of the procedure should read
        gen1(exit,itab[f].resultadr-dx); lev:=lev-1; dx:=odx
}

program PascalS(infile, output);

const cxmax  = 2000;     { size of code array }
      amax   = 16383;    { maximum address }

type  opcode = (add, neg, mul, divd, remd, div2, rem2, eqli, neqi, lssi,
                leqi, gtri, geqi, dupl, swap, andb, orb,
                load, stor, hhalt, wri, wrc, wrl, rdi, rdc, rdl, eol,
                ldc, ldla, ldl, ldg, stl, stg, move, copy, addc, mulc,
                jump, jumpz, call, adjs, sets, exit);
      instr  = record case op: opcode of
                 add, neg, mul, divd, remd, div2, rem2, eqli, neqi, lssi,
                 leqi, gtri, geqi, dupl, swap, andb, orb,
                 load, stor, hhalt, wri, wrc, wrl, rdi, rdc, rdl, eol:
                        ();
                 ldc, ldla, ldl, ldg, stl, stg, move, copy, addc, mulc,
                 jump, jumpz, call, adjs, sets, exit:
                        (a: integer)
               end;

var code: array [0..cxmax] of instr;
    m   : array [0..amax] of integer;
    infile: text;

procedure compile;

const imax   = 100;     { length of identifier table }
      tmax   = 100;     { length of type table }
      lmax   = 10;      { maximum level }
      al     = 10;      { length of identifiers }
      fabs   = 0;       { standard functions }
      fsqr   = 1; fodd   = 2; fchr    = 3;
      ford   = 4; fwrite = 5; fwriteln= 6;
      fread  = 7; freadln= 8; feoln   = 9;
      { standard types }
      intip  = 1; booltip= 2; chartip = 3;

type symbol = (ident, number, sstring, plus, minus, star, lbrack, rbrack,
               colon, eql, neq, lss, leq, gtr, geq, lparen, rparen, comma, 
               semicolon, period, becomes,
               beginsym, endsym, ifsym, thensym, elsesym, whilesym, dosym,
               casesym, repeatsym, untilsym, forsym, tosym, downtosym,
               notsym, divsym, modsym, andsym, orsym, constsym, varsym,
               typesym, arraysym, ofsym, recordsym, progsym, funcsym,
               procsym);
     idkind = (konst, varbl, field, tipe, funkt);
     tpkind = (simple, arrays, records);
     alfa   = packed array [1..al] of char;

var ch: char;                   { last character read }
    cc: integer;                { character count }
    ll: integer;                { line length }
    line: array [1..81] of char;{ present input line }
    sym: symbol;                { last symbol read }
    id: alfa;                   { last identifier read }
    num: integer;               { last number read }
    str: array [1..80] of char; { last string read }
    slen: integer;              { length of last string }
    word: array [beginsym..procsym] of alfa;
    cx: integer;                { code index }
    lev: integer;               { procedure nesting level }
    dx: integer;                { offset in stack }
    labeled: boolean;           { next instruction has label }
    namelist: array [-1..lmax] of integer;
    ix, tx: integer;            { indices in tables }
    itab: array [0..imax] of    { identifier table }
            record name: alfa; link: integer; tip: integer;
              case kind: idkind of
                konst: (val: integer);
                varbl: (vlevel, vadr: integer; refpar: boolean);
                field: (offset: integer);
                tipe : ();
                funkt: (flevel, fadr, lastpar, resultadr: integer;
                           inside: boolean)
            end;
    ttab: array [1..tmax] of    { type table }
            record size: integer;
              case kind: tpkind of
                simple : ();
                arrays : (low, high, elemtip: integer);
                records: (fields: integer)
            end;

procedure error(n: integer);
  var i: integer;
begin for i:= 1 to ll do write(line[i]); writeln;
      for i:= 1 to cc-2 do write(' '); writeln('^');
      writeln('error ', n:1, ' detected');
      halt; { Turbo Pascal exit routine }
end;

procedure getch;
begin if cc=ll then begin
          if eof(infile) then error(100); ll:= 0; cc:= 0;
          while not eoln(infile) do begin ll:= ll+1; read(infile, line[ll]) end;
          ll:= ll+1; read(infile, line[ll])
      end;
      cc:= cc+1; ch:= line[cc]
end;

procedure getsym;
  var k: integer; s: symbol; strend: boolean;
begin while ch in [' ', chr(9), chr(13), chr(10)] do getch;
      if ch in ['a'..'z', 'A'..'Z'] then begin
          k:= 0;
          repeat if k<>al then begin k:= k+1; id[k]:= ch end;
                 getch
          until not (ch in ['a'..'z', 'A'..'Z', '0'..'9']);
          while k<>al do begin k:= k+1; id[k]:= ' ' end;
          sym:= ident;
          for s:= beginsym to procsym do if word[s]=id then sym:= s
      end else if ch in ['0'..'9'] then begin
          num:= 0; sym:= number;
          repeat num:= num*10 + (ord(ch)-ord('0'));
                 getch
          until not (ch in ['0'..'9'])
      end else if ch=':' then begin
          getch;
          if ch='=' then begin getch; sym:= becomes end
                    else sym:= colon
      end else if ch='>' then begin
          getch;
          if ch='=' then begin getch; sym:= geq end
                    else sym:= gtr
      end else if ch='<' then begin
          getch;
          if ch='=' then begin getch; sym:= leq end else
          if ch='>' then begin getch; sym:= neq end
                    else sym:= lss
      end else if ch='.' then begin
          getch;
          if ch='.' then begin getch; sym:= colon end
                    else sym:= period
      end else if ch='''' then begin
          slen:= 0; strend:= false; sym:= sstring;
          repeat if cc=ll then error(101); getch;
                 if ch='''' then begin
                     getch;
                     if ch='''' then begin
                         slen:= slen+1; str[slen]:= ch
                     end else
                         strend:= true
                 end else begin
                     slen:= slen+1; str[slen]:= ch
                 end
          until strend;
          if slen=0 then error(102)
      end
      else if ch='+' then begin getch; sym:= plus end
      else if ch='-' then begin getch; sym:= minus end
      else if ch='*' then begin getch; sym:= star end
      else if ch='(' then begin getch; sym:= lparen end
      else if ch=')' then begin getch; sym:= rparen end
      else if ch='[' then begin getch; sym:= lbrack end
      else if ch=']' then begin getch; sym:= rbrack end
      else if ch='=' then begin getch; sym:= eql end
      else if ch=',' then begin getch; sym:= comma end
      else if ch=';' then begin getch; sym:= semicolon end
      else if ch='{'
      then begin repeat getch until ch='}';
                 getch; getsym
           end
      else error(103)
end;

procedure check(s: symbol);
begin if sym<>s then error(ord(s)) end;

procedure skip(s: symbol);
begin check(s); getsym end;

procedure enter(id: alfa; k: idkind; t: integer);
  var j: integer;
begin if ix=imax then error(104); ix:= ix+1;
      itab[0].name:= id; j:= namelist[lev];
      while itab[j].name<>id do j:= itab[j].link;
      if j<>0 then error(105);
      with itab[ix] do begin
        name:= id; link:= namelist[lev]; tip:= t; kind:= k
      end;
      namelist[lev]:= ix
end;

function position: integer;
  var i, j: integer;
begin itab[0].name:= id; i:= lev;
      repeat j:= namelist[i];
             while itab[j].name<>id do j:= itab[j].link;
             i:= i-1
      until (i<-1) or (j<>0);
      if j=0 then error(106); position:= j
end;

procedure gen(i: instr);
begin case i.op of
        dupl, eol, ldc, ldla, ldl, ldg:
          dx:= dx-1;
        neg, div2, rem2, swap, load, hhalt, wrl, rdl,
        addc, mulc, jump, call, sets, exit:
          ;
        add, mul, divd, remd, eqli, neqi, lssi, leqi, gtri,
        geqi, andb, orb, wrc, rdi, rdc, stl, stg, jumpz:
          dx:= dx+1;
        stor, wri, move:
          dx:= dx+2;
        copy:
          dx:= dx-i.a+1;
        adjs:
          dx:= dx+i.a
      end;
      if not (((i.op in [addc, adjs]) and (i.a=0)) or
              ((i.op=mulc) and (i.a=1))) then
      if labeled then begin
          code[cx]:= i; cx:= cx+1; labeled:= false
      end else if (code[cx-1].op=ldc) and (i.op=add) then
          code[cx-1].op:= addc
      else if (code[cx-1].op=ldc) and (i.op=mul) then
          code[cx-1].op:= mulc
      else if (code[cx-1].op=ldc) and (i.op=neg) then
          code[cx-1].a:= -code[cx-1].a
      else if (code[cx-1].op=ldc) and (code[cx-1].a=2) and (i.op=divd) then
          code[cx-1].op:= div2
      else if (code[cx-1].op=ldc) and (code[cx-1].a=2) and (i.op=remd) then
          code[cx-1].op:= rem2
      else if (code[cx-1].op=ldc) and (i.op=stor) then
          code[cx-1].op:= stg
      else if (code[cx-1].op=ldc) and (i.op=load) then
          code[cx-1].op:= ldg
      else if (code[cx-1].op=ldla) and (i.op=stor) then
          code[cx-1].op:= stl
      else if (code[cx-1].op=ldla) and (i.op=load) then
          code[cx-1].op:= ldl
      else begin
          code[cx]:= i; cx:= cx+1
end   end;

procedure gen0(op: opcode);
  var i: instr;
begin i.op:= op; gen(i) end;

procedure gen1(op: opcode; a: integer);
  var i: instr;
begin i.op:= op; i.a:= a; gen(i) end;

function codelabel: integer;
begin codelabel:= cx; labeled:= true end;

procedure address(lv, ad: integer);
begin if lv=0 then
          gen1(ldc, ad)
      else if lv=lev then
          gen1(ldla, ad-dx)
      else begin
          gen1(ldl, -dx);
          while lv+1<>lev do begin gen0(load); lv:= lv+1 end;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美国产精品v| 一本大道久久a久久综合婷婷| 日韩精品一区二区三区四区视频| 免费日本视频一区| 亚洲精选免费视频| 久久在线观看免费| 欧美日韩一级二级三级| 国产高清无密码一区二区三区| 91精品国产综合久久小美女| 国产精品一品视频| 婷婷综合在线观看| 亚洲女同ⅹxx女同tv| 久久久国产精华| 欧美一级艳片视频免费观看| 在线看不卡av| 91丨九色porny丨蝌蚪| 丁香五精品蜜臀久久久久99网站| 亚洲一区影音先锋| 亚洲综合色噜噜狠狠| 国产精品国产自产拍高清av| 国产色产综合产在线视频| 欧美电视剧在线观看完整版| 欧美军同video69gay| 在线观看成人免费视频| 91黄色免费网站| 欧美日韩电影在线| 在线成人免费观看| 欧美三电影在线| 这里是久久伊人| 日韩欧美一区中文| 欧美一区二区三区人| 日韩免费看网站| ww久久中文字幕| 国产女同性恋一区二区| 17c精品麻豆一区二区免费| 亚洲女与黑人做爰| 天堂久久一区二区三区| 国产精品香蕉一区二区三区| 99re这里只有精品首页| 欧美日韩精品一区二区天天拍小说 | 亚洲一区二区av在线| 亚洲综合精品久久| 日韩成人午夜精品| 国产一区在线观看麻豆| 丁香婷婷综合网| 成人动漫在线一区| 欧美日韩专区在线| 精品国产一区二区三区久久久蜜月 | 欧美日韩情趣电影| 国产日韩欧美麻豆| 亚洲电影在线播放| 韩国精品免费视频| 欧美日免费三级在线| 国产精品成人一区二区三区夜夜夜| 中文字幕 久热精品 视频在线| 亚洲精品五月天| 欧美另类videos死尸| 国产亚洲一区二区在线观看| 亚洲影视在线播放| 床上的激情91.| 欧美做爰猛烈大尺度电影无法无天| 欧美一级片在线看| 亚洲国产wwwccc36天堂| 久久99国产精品麻豆| 欧美精品精品一区| 亚洲精品中文在线观看| 成人三级伦理片| 2023国产一二三区日本精品2022| 五月激情丁香一区二区三区| 色妹子一区二区| 国产清纯美女被跳蛋高潮一区二区久久w| 一区二区三区不卡视频| 99精品国产91久久久久久| 国产精品国产三级国产普通话蜜臀| 日本欧美在线看| 在线不卡中文字幕播放| 亚洲超碰精品一区二区| 欧美精品在线观看一区二区| 亚洲制服丝袜av| 欧美猛男男办公室激情| 日本欧美在线观看| xf在线a精品一区二区视频网站| 国内精品不卡在线| 日本一区二区动态图| 99vv1com这只有精品| 综合久久久久综合| 欧洲一区二区三区免费视频| 性做久久久久久免费观看欧美| 在线成人免费观看| 国产一区二区三区在线看麻豆| 久久久国产一区二区三区四区小说| 国产成都精品91一区二区三| 舔着乳尖日韩一区| 久久久天堂av| 日本欧美在线观看| 亚洲欧美综合在线精品| 欧美专区亚洲专区| 日本成人中文字幕| 国产精品久久久久久久久晋中| 欧美亚洲另类激情小说| 国产另类ts人妖一区二区| 亚洲一区二区在线免费看| 欧美电影免费观看高清完整版在| 成人动漫一区二区| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产欧美一区二区精品仙草咪| 日本丰满少妇一区二区三区| 日韩av高清在线观看| 国产精品三级视频| 777午夜精品视频在线播放| 久久精品噜噜噜成人88aⅴ| 国产精品美女久久久久久久久| 成人av手机在线观看| 麻豆91免费看| 三级影片在线观看欧美日韩一区二区| 久久一二三国产| 欧美视频一二三区| 成人a区在线观看| 麻豆国产一区二区| 一级日本不卡的影视| 欧美人xxxx| 欧美一区二区免费视频| 日韩免费在线观看| 91精品国产一区二区三区蜜臀| 91高清视频免费看| 91蝌蚪porny九色| 91日韩精品一区| 色婷婷精品久久二区二区蜜臂av | 91麻豆精品国产91久久久久久久久 | 色综合视频在线观看| 91福利视频久久久久| 欧美日韩午夜在线视频| 欧美日韩亚洲另类| 欧美一级欧美三级在线观看| 欧美精品久久一区| 色94色欧美sute亚洲线路一ni | 国产视频一区在线播放| 久久久久国产精品麻豆ai换脸 | 欧美日韩免费在线视频| 欧美揉bbbbb揉bbbbb| 精品国产三级a在线观看| 亚洲三级在线免费| 亚洲成人先锋电影| 成人午夜视频网站| 欧美一激情一区二区三区| 国产日韩精品视频一区| 亚洲国产精品久久人人爱| 韩国成人精品a∨在线观看| 91女人视频在线观看| 欧美va亚洲va| 亚洲一区二区三区视频在线播放| 极品少妇xxxx精品少妇| 欧美三日本三级三级在线播放| 国产亚洲精品超碰| 男男视频亚洲欧美| 欧美在线一二三| 日本一区二区不卡视频| 美女免费视频一区| 欧美日韩精品一区视频| 福利一区福利二区| 26uuu欧美| 激情综合色播五月| 日韩欧美精品在线| 日日夜夜精品免费视频| 欧美日韩一区二区电影| 亚洲一区二区四区蜜桃| 色综合婷婷久久| 亚洲女厕所小便bbb| 色妹子一区二区| 亚洲一区二区三区四区的| 欧美影视一区在线| 五月天激情小说综合| 欧美猛男gaygay网站| 日本91福利区| 久久亚洲一区二区三区四区| 国精产品一区一区三区mba视频 | 日韩一区二区麻豆国产| 久久99精品久久久| 欧美精品一区二区在线播放| 国产剧情一区二区| 中文字幕不卡在线播放| 日本精品一级二级| 日韩电影在线一区| 久久嫩草精品久久久精品| 成人黄动漫网站免费app| 亚洲美女淫视频| 日韩一区二区三区电影| 粉嫩嫩av羞羞动漫久久久| 一区二区日韩av| 欧美v日韩v国产v| 91同城在线观看| 国产成人亚洲精品狼色在线| 亚洲精品国产第一综合99久久| 日韩欧美电影一区| 一本久道久久综合中文字幕| 激情丁香综合五月| 亚洲五码中文字幕| 国产日韩一级二级三级| 欧美色图激情小说| 不卡欧美aaaaa|