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

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

?? pl0語(yǔ)言編譯程序分析(pascall版).txt

?? PL/0語(yǔ)言編譯程序分析(pascal版)
?? TXT
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
program PL0 (input,output);
(*PL/0 compiler with code generation*)
(*Program 5.6 in Algorithms + Data Structures = Programs*)
(*Almost identical with the version in Compilerbau*)
(*Author: Niklaus Wirth*)
label 
  99;
const
  norw = 11;      (*no. of reserved words*)
  txmax = 100;    (*length of identifier table*)
  nmax = 14;      (*max. no. of digits in numbers*)
  al = 10;        (*length of identifiers*)
  amax = 2047;    (*maximum address*)
  levmax = 3;     (*maximum 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,dosym,callsym,constsym,varsym,procsym);
  alfa =    packed array[1..al] of char;
  object = (constant,variable,prozedure);
  symset = set of symbol;
  fct =    (lit,opr,lod,sto,cal,int,jmp,jpc);   (*functions*)
  instruction = 
    packed record
      f: fct;      (*function code*)
      l: 0..levmax;(*level*)
      a: 0..amax;  (*displacement address*)
    end;
(*
  lit 0,a: load constant a
  opr 0,a: execute operation 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: increment t-register by a
  jmp 0,a: jump to a
  jpc 0,a: jump conditional to a*)

var
  ch: char;    (*last character 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,err: 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[char] of symbol;
  mnemonic: array[fct] of 
              packed array[1..5] of char;
  declbegsys,statbegsys,facbegsys: symset;
  table: 
    array[0..txmax] of
    record 
      name: alfa;
      case kind: object of
      constant: (val: integer);
      variable,prozedure: (level,adr: integer)
    end;

procedure error(n: integer);
begin
  writeln('****',' ':cc-1,'^',n:2);
  err:= err+1
end; (*error*)

procedure getsym;    
var
  i,j,k: integer;

  procedure getch;
  begin
    if cc = ll then
    begin
      if eof(input) then
      begin
        writeln('Program incomplete');
        goto 99
      end;
      ll:= 0;
      cc:= 0;
      write(cx:5,' ');
      while not eoln(input) do
      begin
        ll:= ll+1;
        read(ch);
        write(ch);
        line[ll]:= ch;
      end;
      writeln;
      ll:= ll+1;
      read(line[ll])
    end;
    cc:= cc+1;
    ch:= line[cc];
  end(*getch*);

begin (*getsym*)
  while ch = ' ' do
    getch;
  if ch in ['A'..'Z'] then
  begin (*identifier 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
(*extra stuff added to support <=*)
        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
(*end of extra stuff*)
      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');
    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:object);
  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;
        prozedure:
          level:= lev;
      end
    end
  end (*enter*);

  function position(id: alfa): integer;
  var
    i: integer;
  begin (*find identifier id 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*)
    for i:= cx0 to cx-1 do
      with code[i] do
        writeln(i,mnemonic[f]:5,l:3,a:5)
  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);
                  prozedure:  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,[lparen],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

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品伦理在线| 99久久精品免费看| 亚洲自拍偷拍麻豆| 亚洲综合一区二区精品导航| 亚洲欧洲av在线| 亚洲男人电影天堂| 亚洲一区中文日韩| 日韩电影在线免费看| 午夜不卡av免费| 另类小说图片综合网| 精品一区二区三区免费毛片爱| 久久不见久久见免费视频7| 蜜臀精品一区二区三区在线观看 | 国产成人精品一区二区三区四区 | 亚洲欧美自拍偷拍色图| 中文字幕中文字幕在线一区| 亚洲欧美国产77777| 午夜在线电影亚洲一区| 久久国产剧场电影| 不卡一区二区中文字幕| 欧洲一区在线观看| 欧美一级二级三级蜜桃| 久久精品视频网| 亚洲激情自拍偷拍| 另类小说欧美激情| av在线一区二区| 欧美一区二区三区系列电影| 国产欧美精品区一区二区三区| 亚洲图片另类小说| 玖玖九九国产精品| 91丨porny丨国产入口| 91精品在线免费观看| 国产欧美精品一区| 全部av―极品视觉盛宴亚洲| 国产91丝袜在线18| 欧美高清视频一二三区 | 91视频.com| 日韩欧美中文一区| 国产精品进线69影院| 亚洲一区二区免费视频| 国产综合久久久久久久久久久久| 91视频一区二区| 日韩三级免费观看| 亚洲一区在线播放| 国产一区在线视频| 欧美男人的天堂一二区| 国产精品美日韩| 精品影院一区二区久久久| 日本国产一区二区| 欧美国产日韩a欧美在线观看| 日韩va欧美va亚洲va久久| 91免费视频观看| 国产婷婷色一区二区三区| 日韩在线观看一区二区| 蜜臀av一区二区在线免费观看| 国产不卡视频一区二区三区| 欧美人体做爰大胆视频| 亚洲欧美在线视频| 国产成人精品免费视频网站| 欧美一级精品大片| 亚洲午夜久久久久久久久电影网 | 欧美日韩免费电影| 亚洲天堂av一区| 成人国产精品免费观看视频| 26uuu欧美| 国产一区视频导航| 欧美不卡视频一区| 老司机免费视频一区二区| 在线观看日韩国产| 亚洲综合小说图片| 在线观看av不卡| 亚洲综合一区在线| 欧美色图激情小说| 国产suv一区二区三区88区| 色婷婷精品久久二区二区蜜臂av| 26uuu国产日韩综合| 国产在线国偷精品产拍免费yy| 欧美一级精品大片| 久久精品国产精品亚洲红杏| 欧美精品在线一区二区| 三级一区在线视频先锋| 日韩免费一区二区三区在线播放| 久热成人在线视频| 精品sm捆绑视频| 成人免费毛片片v| 亚洲天堂免费在线观看视频| 欧美三级乱人伦电影| 日韩影院精彩在线| 精品精品欲导航| 丰满亚洲少妇av| 亚洲乱码国产乱码精品精小说 | 国产精品久久久久影院老司| 国产精品一区免费在线观看| 国产丝袜在线精品| 99综合电影在线视频| 亚洲国产欧美另类丝袜| 欧美一区二区三区播放老司机| 久久国产精品露脸对白| 国产亚洲欧洲997久久综合| 成人激情综合网站| 亚洲午夜久久久久久久久电影网| 欧美一级片在线观看| 国产一区二区三区| 亚洲黄色片在线观看| 欧美一区二区三区在线观看| 国产99精品国产| 亚洲影院免费观看| 久久综合av免费| 欧美亚洲综合在线| 韩国一区二区视频| 一区二区三区四区在线免费观看| 3d成人h动漫网站入口| 国产不卡视频在线播放| 日韩高清在线一区| 国产精品美女久久福利网站| 3d动漫精品啪啪一区二区竹菊| 成人av在线网站| 日韩黄色小视频| 国产精品乱人伦一区二区| 欧美疯狂性受xxxxx喷水图片| 国产成人在线视频网站| 日韩电影在线一区二区三区| 亚洲欧美日韩一区二区| 精品国产免费视频| 欧美日韩的一区二区| 99在线热播精品免费| 韩国精品久久久| 三级影片在线观看欧美日韩一区二区| 国产精品福利av| 久久久久久久久久久久久夜| 欧美日韩一区二区三区四区五区| 成人在线综合网| 老司机一区二区| 日韩高清在线不卡| 五月天中文字幕一区二区| 亚洲精品福利视频网站| 国产精品丝袜久久久久久app| 日韩精品最新网址| 日韩亚洲欧美中文三级| 欧美色精品在线视频| 欧美综合一区二区| 日本乱人伦一区| 91麻豆精东视频| 99re热视频精品| 91香蕉视频mp4| 91在线观看下载| 91小视频免费观看| 在线观看www91| 欧美日韩亚洲高清一区二区| 欧美亚洲精品一区| 欧美在线一二三四区| 欧美亚洲禁片免费| 在线不卡一区二区| 日韩一区二区三区电影在线观看 | 欧美精品一区二区不卡| 日韩女优av电影在线观看| 欧美哺乳videos| 国产亚洲欧美一级| 亚洲国产高清不卡| 亚洲婷婷综合久久一本伊一区| 亚洲免费在线视频| 亚洲超碰精品一区二区| 日韩精品一级二级| 精品在线亚洲视频| 成人黄色软件下载| 色综合久久久久久久久久久| 欧美日免费三级在线| 日韩一区二区三区在线视频| 久久精品亚洲乱码伦伦中文| 中文字幕在线不卡| 欧美二区三区的天堂| 欧美无砖专区一中文字| 欧美日韩一区 二区 三区 久久精品| 色综合久久中文综合久久97| 欧美日韩亚州综合| 欧美刺激午夜性久久久久久久| 久久精品一区二区三区四区| 国产精品嫩草99a| 亚洲午夜电影网| 久久电影国产免费久久电影 | 成人黄页毛片网站| 欧美性色aⅴ视频一区日韩精品| 欧美日韩成人综合| 国产日韩欧美a| 亚洲狠狠爱一区二区三区| 韩国三级中文字幕hd久久精品| 成人久久久精品乱码一区二区三区| 色综合天天视频在线观看 | www.日韩大片| 欧美日韩精品欧美日韩精品一综合| 欧美成人乱码一区二区三区| 一色桃子久久精品亚洲| bt7086福利一区国产| 欧美四级电影在线观看| 精品福利一二区| 亚洲午夜久久久久久久久电影网 | 日韩美女啊v在线免费观看| 亚洲成av人**亚洲成av**| 成人久久18免费网站麻豆| 欧美一区二区三区公司|