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

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

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

?? PL/0語言編譯程序分析(pascal版)
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
      begin
        addop:= sym;
        getsym;
        term(fsys+[plus,minus]);
        if addop = plus then
          gen(opr,0,2)
        else
          gen(opr,0,3)
      end;
    end (*expression*);

    procedure condition(fsys:symset);
    var
      relop:symbol;
    begin
      if sym = oddsym then
      begin
        getsym;
        expression(fsys);
        gen(opr,0,6)
      end
      else
      begin
        expression([eql,neq,lss,gtr,leq,geq]+fsys);
        if not(sym in [eql,neq,lss,leq,gtr,geq]) then
          error(20)
        else
        begin
          relop:= sym;
          getsym;
          expression(fsys);
          case relop of
            eql: gen(opr,0,8);
            neq: gen(opr,0,9);
            lss: gen(opr,0,10);
            geq: gen(opr,0,11);
            gtr: gen(opr,0,12);
            leq: gen(opr,0,13);
          end;
        end;
      end;
    end (*condition*);

  begin (*statement*)
    if sym = ident then
    begin
      i:= position(id);
      if i = 0 then
        error(11)
      else
        if table[i].kind<>variable then
        begin (*assignment to non-variable*)
          error(12);
          i:= 0
        end;
      getsym;
      if sym = becomes then
        getsym
      else
        error(13);
      expression(fsys);
      if i <> 0 then
        with table[i] do
          gen(sto,lev-level,adr);
    end
    else
      if sym = callsym then
      begin
        getsym;
        if sym<> ident then
          error(14)
        else
        begin
          i:= position(id);
          if i = 0 then
            error(11)
          else
            with table[i] do
              if kind = prozedure then
                gen(cal,lev-level,adr)
              else
                error(15);
            getsym
        end
      end
      else
        if sym = ifsym then
        begin
          getsym;
          condition([thensym,dosym]+fsys);
          if sym = thensym then
            getsym
          else
            error(16);
          cx1:= cx;
          gen(jpc,0,0);
          statement(fsys);
          code[cx1].a:= cx;
        end
        else
          if sym = beginsym then
          begin
            getsym;
            statement([semicolon,endsym]+fsys);
            while sym in [semicolon]+statbegsys do
            begin
              if sym = semicolon then
                getsym
              else
                error(10);
              statement([semicolon,endsym]+fsys)
            end;
            if sym = endsym then
              getsym
            else
              error(17)
          end
          else
            if sym = whilesym then
            begin
              cx1:= cx;
              getsym;
              condition([dosym]+fsys);
              cx2:= cx;
              gen(jpc,0,0);
              if sym = dosym then
                getsym
              else
                error(18);
              statement(fsys);
              gen(jmp,0,cx1);
              code[cx2].a:= cx;
            end;
    test(fsys,[],19)
  end (*statement*);

begin (*block*)
  dx:= 3;
  tx0:= tx;
  table[tx].adr:= cx;
  gen(jmp,0,0);
  if lev>levmax then
    error(32);
  repeat  
    if sym = constsym then
    begin
      getsym;
      repeat
        constdeclaration;
        while sym = comma do
        begin
          getsym;
          constdeclaration;
        end;
        if sym = semicolon then
          getsym
        else
          error(5)
      until sym<> ident;
    end;
    if sym = varsym then
    begin
      getsym;
      repeat
        vardeclaration;
        while sym = comma do
        begin
          getsym;
          vardeclaration;
        end;
        if sym = semicolon then
          getsym
        else
          error(5)
      until sym<> ident;
    end;
    while sym = procsym do
    begin
      getsym;
      if sym = ident then
      begin
        enter(prozedure);
        getsym
      end
      else
        error(4);
      if sym = semicolon then
        getsym
      else
        error(5);
      block(lev+1,tx,[semicolon]+fsys);
      if sym = semicolon then
      begin
        getsym;
        test(statbegsys+[ident,procsym],fsys,6)
      end
      else
        error(5);
    end;
    test(statbegsys+[ident],declbegsys,7)
  until not (sym in declbegsys);
  code[table[tx0].adr].a:= cx;
  with table[tx0] do
  begin
    adr:= cx; (*start adr of code*)
  end;
  cx0:= cx;
  gen(int,0,dx);
  statement([semicolon,endsym]+fsys);
  gen(opr,0,0); (*return*)
  test(fsys,[],8);
  listcode;
end (*block*);

procedure interpret;
const
  stacksize = 500;
var 
  p,b,t: integer; (*program-,base-,topstack-registers*)
  i: instruction; (*instruction register*)
  s: array[1..stacksize] of integer;  (*datastore*)

  function base(l: integer): integer;
  var
    b1: integer;
  begin
    b1:= b;(*find base l levels down*)
    while l>0 do (*??*)
    begin
      b1:= s[b1];
      l:= l-1
    end;
    base:= b1
  end (*base*);

begin
  writeln('Start PL/0');
  t:= 0;
  b:= 1;
  p:= 0;
  s[1]:= 0;
  s[2]:= 0;
  s[3]:= 0;
  repeat
    i:= code[p];
    p:= p+1;
    with i do
    case f of
    lit: begin
           t:= t+1;
           s[t]:= a
         end;
    opr: case a of (*operator*)
          0:begin   (*return*)
              t:= b-1;
              p:= s[t+3];
              b:= s[t+2];
            end;
          1:s[t]:= -s[t];
          2:begin
              t:= t-1;
              s[t]:= s[t]+s[t+1]
            end;
          3:begin 
              t:= t-1;
              s[t]:= s[t]-s[t+1]
            end;
          4:begin
              t:= t-1;
              s[t]:= s[t]*s[t+1]
            end;
          5:begin
              t:= t-1;
              s[t]:= s[t] div s[t+1]
            end;
          6:s[t]:= ord(odd(s[t]));
          8:begin
              t:= t-1;
              s[t]:= ord(s[t]=s[t+1])
            end;
          9:begin
              t:= t-1;
              s[t]:= ord(s[t]<>s[t+1])
            end;
         10:begin
              t:= t-1;
              s[t]:= ord(s[t]<s[t+1])
            end;
         11:begin
              t:= t-1;
              s[t]:= ord(s[t]>=s[t+1])
            end;
         12:begin
              t:= t-1;
              s[t]:= ord(s[t]>s[t+1])
            end;
         13:begin
              t:= t-1;
              s[t]:= ord(s[t]<=s[t+1])
            end;
         end;
    lod: begin
           t:= t+1;
           s[t]:= s[base(l)+a]
         end;
    sto: begin
           s[base(l)+a]:= s[t];
           writeln(s[t]);
           t:= t-1
         end;
    cal: begin (*generate new block mark*)
           s[t+1]:= base(l);
           s[t+2]:= b;
           s[t+3]:= p;
           b:= t+1;
           p:= a
         end;
    int: t:= t+a;
    jmp: p:= a;
    jpc: begin
           if s[t] = 0 then
             p:= a;
           t:= t-1
         end
    end; (*with,case*)
  until p = 0;
  write('End PL/0');
end (*interpret*);

begin (*main program*)
  for ch:= 'A' to ';' do
    ssym[ch]:= nul;
  word[1]:= 'begin     ';
  word[2]:= 'call      ';
  word[3]:= 'const     '; 
  word[4]:= 'do        ';
  word[5]:= 'end       ';
  word[6]:= 'if        ';
  word[7]:= 'odd       ';
  word[8]:= 'procedure ';
  word[9]:= 'then      ';
  word[10]:= 'var       ';
  word[11]:= 'while     ';
  wsym[1]:= beginsym;   wsym[2]:= callsym;
  wsym[3]:= constsym;   wsym[4]:= dosym;
  wsym[5]:= endsym;     wsym[6]:= ifsym;
  wsym[7]:= oddsym;     wsym[8]:= procsym;
  wsym[9]:= thensym;    wsym[10]:= varsym;
  wsym[11]:= whilesym;
  ssym['+']:= plus;
  ssym['-']:= minus;
  ssym['*']:= times;
  ssym['/']:= slash;
  ssym['(']:= lparen;
  ssym[')']:= rparen;
  ssym['=']:= eql;
  ssym[',']:= comma;
  ssym['.']:= period;
  ssym['#']:= neq;
  ssym['<']:= lss;
  ssym['>']:= gtr;
  ssym[';']:= leq;
  ssym[';']:= geq;
  ssym[';']:= semicolon;
  mnemonic[lit]:= ' lit ';
  mnemonic[opr]:= ' opr ';
  mnemonic[lod]:= ' lod ';
  mnemonic[sto]:= ' sto ';
  mnemonic[cal]:= ' cal ';
  mnemonic[int]:= ' int ';
  mnemonic[jmp]:= ' jmp ';
  mnemonic[jpc]:= ' jpc ';
  declbegsys:= [constsym,varsym,procsym];
  statbegsys:= [beginsym,callsym,ifsym,whilesym];
  facbegsys:= [ident,number,lparen];
  page(output);
  err:= 0;
  cc:= 0;
  cx:= 0;
  ll:= 0;
  ch:= ' ';
  kk:= al;
  getsym;
  block(0,0,[period]+declbegsys+statbegsys);
  if sym<> period then
    error(9);
  if err = 0 then
    interpret
  else
    write('errors in PL/0 Program');
99:
  writeln
end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲少妇最新在线视频| 久久夜色精品国产欧美乱极品| 亚洲乱码国产乱码精品精的特点| 国产ts人妖一区二区| 国产精品丝袜91| av男人天堂一区| 一区二区免费在线| 欧美一区二区在线免费播放| 麻豆成人91精品二区三区| 精品国产91久久久久久久妲己| 国产精品一级在线| 中文字幕制服丝袜一区二区三区| 一本到不卡免费一区二区| 亚洲一区二区在线免费观看视频| 欧美男女性生活在线直播观看| 日本不卡一二三| 久久久91精品国产一区二区精品| 成人毛片老司机大片| 亚洲尤物视频在线| 欧美成人伊人久久综合网| 国产成人综合亚洲91猫咪| 亚洲激情自拍偷拍| 91精品国产美女浴室洗澡无遮挡| 国产美女久久久久| 亚洲综合一区在线| 精品国产乱子伦一区| 一本大道久久a久久精二百| 视频一区二区中文字幕| 久久精品欧美日韩精品| 在线一区二区三区四区五区| 日本不卡一区二区三区| 国产精品免费久久| 555夜色666亚洲国产免| 成人激情电影免费在线观看| 日韩av电影天堂| ...中文天堂在线一区| 欧美一区二区黄色| 色偷偷一区二区三区| 麻豆精品一二三| 亚洲激情男女视频| 久久精品亚洲麻豆av一区二区| 精品视频在线视频| 成人白浆超碰人人人人| 男男视频亚洲欧美| 亚洲人一二三区| 久久久高清一区二区三区| 6080yy午夜一二三区久久| 91视频.com| 国产盗摄一区二区| 久久99久久久欧美国产| 亚洲一区二区中文在线| 中文字幕一区二区视频| 久久―日本道色综合久久| 欧美日韩国产大片| 色综合色综合色综合| 风间由美中文字幕在线看视频国产欧美 | 天天亚洲美女在线视频| 亚洲欧洲日韩综合一区二区| 国产亚洲欧美一级| 日韩午夜精品视频| 91精品国模一区二区三区| 欧美日韩另类一区| 欧美亚洲禁片免费| 99国产精品久久久久久久久久 | 亚洲欧美色图小说| 国产欧美一区二区精品性色| 欧美videos大乳护士334| 欧美男生操女生| 欧美日韩精品三区| 欧美日韩日日夜夜| 精品视频一区 二区 三区| 欧美在线不卡视频| 91福利区一区二区三区| 日本福利一区二区| 91国模大尺度私拍在线视频| 色综合久久88色综合天天6| 波多野结衣一区二区三区 | 欧美成人bangbros| 欧美一级艳片视频免费观看| 日韩一区二区三区免费看 | 97久久精品人人澡人人爽| 91在线观看一区二区| 91在线观看下载| 在线观看日韩一区| 欧美另类变人与禽xxxxx| 91精品午夜视频| 精品国免费一区二区三区| 久久久久久久综合日本| 日本一区二区在线不卡| 自拍偷拍亚洲激情| 亚洲一区在线观看网站| 日韩国产精品久久| 国产一区二区三区在线观看免费视频| 国产一区二区三区四区五区入口| 国产成人午夜精品5599 | 亚洲国产视频a| 水蜜桃久久夜色精品一区的特点| 日韩精品国产欧美| 国产一区二区在线看| av网站一区二区三区| 欧美视频一二三区| 欧美电影免费观看高清完整版在 | 成人在线一区二区三区| 91啪亚洲精品| 日韩视频一区在线观看| 欧美国产视频在线| 亚洲国产人成综合网站| 精品一区二区三区在线观看国产| 成人动漫一区二区在线| 欧美日韩亚洲综合一区| 精品成人一区二区三区四区| 国产精品精品国产色婷婷| 亚洲一区二区视频| 韩国女主播一区| 日本乱人伦aⅴ精品| 欧美一区二区三区婷婷月色| 久久精品一区四区| 亚洲成人动漫精品| 成人免费视频视频| 欧美精品在线视频| 中文字幕日韩一区| 麻豆成人久久精品二区三区红| 成人av在线网| 欧美电影免费观看高清完整版在线观看| 中文字幕高清一区| 美女性感视频久久| 色婷婷亚洲综合| 久久久一区二区| 天天av天天翘天天综合网色鬼国产| 国产999精品久久久久久| 欧美群妇大交群中文字幕| 国产精品网站在线观看| 久久99精品久久久久久| 欧美丝袜丝交足nylons| 国产精品无遮挡| 久久精品噜噜噜成人88aⅴ| 日本道免费精品一区二区三区| 精品久久一区二区| 午夜亚洲福利老司机| 99精品久久久久久| 日本一区二区三区四区在线视频| 全国精品久久少妇| 91免费观看国产| 国产欧美精品一区二区色综合 | 99久久精品国产观看| 久久一留热品黄| 免费精品视频最新在线| 在线看不卡av| 亚洲日韩欧美一区二区在线| 国产精品 欧美精品| 欧美成人精品福利| 日韩二区三区在线观看| 91久久精品一区二区三| 中文字幕中文在线不卡住| 国产成人亚洲精品青草天美| 精品剧情v国产在线观看在线| 视频在线观看国产精品| 欧美日韩视频在线第一区| 亚洲综合成人网| 色嗨嗨av一区二区三区| 亚洲激情男女视频| 91免费版在线看| 亚洲天堂2016| 91福利社在线观看| 一区二区三区欧美| 欧美性生活影院| 亚洲福中文字幕伊人影院| 欧美色男人天堂| 亚洲国产wwwccc36天堂| 欧美人狂配大交3d怪物一区| 视频一区二区三区入口| 欧美精品亚洲二区| 美女网站在线免费欧美精品| 精品理论电影在线| 国产一区二区三区黄视频| 国产农村妇女毛片精品久久麻豆 | 亚洲视频一区二区在线| 在线日韩av片| 天堂成人国产精品一区| 精品奇米国产一区二区三区| 国产一区二区三区久久久| 国产精品私人影院| 欧美专区日韩专区| 日韩在线一区二区三区| 欧美tickling挠脚心丨vk| 国产精品综合视频| 亚洲六月丁香色婷婷综合久久| 欧美色偷偷大香| 久久97超碰国产精品超碰| 日本一区二区不卡视频| 欧美专区在线观看一区| 青青草国产成人99久久| 国产性天天综合网| 色婷婷精品大视频在线蜜桃视频| 亚洲成av人片在www色猫咪| 日韩久久精品一区| 97久久精品人人澡人人爽| 亚洲成人午夜影院| 久久影院视频免费| 91老师片黄在线观看|