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

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

?? pl0.pas

?? 一個詞法分析器還有實驗的說明
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
program pl0(fa,fa1,fa2);
(*pl0 compiler with code generation*)

label 99;

const norw=13;
      txmax=100;
      nmax=14;
      al=10;
      amax=2047;
      levmax=3;
      cxmax=200;

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);
      alfa = packed array [1..al] of char;
      obj = (constant,variable,procedur);
      symset = set of symbol;
      fct = (lit,opr,lod,sto,cal,int,jmp,jpc);
      instruction = packed record
                      f : fct;
                      l : 0..levmax;
                      a : 0..amax;
                    end;


var
  fa : text;
  fa1,fa2 : text;
  listswitch : boolean;
  ch : char;
  sym : symbol;
  id : alfa;


  num : integer;   (* last munber 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 "arry[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 : obj of
                              constant : (val:integer);
                              variable, procedur : (level,adr,size:integer)
                    (*"size" lacking in original. I think it belongs here*)
                            end;
  fin,fout:text;
  fname:alfa;
  err:integer;
  procedure error(n:integer);
  begin
    writeln (' * * * * ', ' ' : cc-1,'!',n:2);
    writeln (fa1,' * * * * ' , ' ' : cc-1, '!', n:2);
    err:=err+1
  end  (*error*);
 procedure getsym;
 var i,j,k:integer;
   procedure getch;        (**************  getch   *******************)
   begin
     if cc=ll then
     begin
       if eof(fin) then
       begin
         write('program incomplete');
         (********************************goto 99;*)
       end;
       ll := 0;
       cc := 0;
       write(cx:4,' ');
       write(fa1,cx:4,'');
       while not eoln(fin) do
       begin
	 ll:=ll+1;
	 read(fin,ch);
	 write(ch);
	 write(fa1,ch);
	 line[ll]:=ch
       end;
       writeln;
       ll:=ll+1;
       read(fin,line[ll]);
       writeln(fa1);
     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
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:=geq
                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');
(************************************************************ 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:obj);
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
  begin
    for i:=cx0 to cx-1 do
      with code[i] do
      begin
        writeln(fa,i:4,mnemonic[f]:5,1:3,a:5)
      end;
  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([times,slash]+fsys);
  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)
    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,leq,gtr,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);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美aaa在线| 欧美美女一区二区| 欧洲视频一区二区| 欧美精品一区二区久久久| 亚洲欧美日韩国产另类专区| 久久精品国产亚洲一区二区三区| 色欧美日韩亚洲| 中文乱码免费一区二区| 蜜桃av一区二区| 欧美日韩中文一区| 国产精品精品国产色婷婷| 九色综合狠狠综合久久| 欧美日韩国产成人在线91| 亚洲欧美区自拍先锋| 成人小视频在线| 久久精品欧美日韩精品| 激情小说欧美图片| 4438成人网| 天天色天天操综合| 欧美性一二三区| 亚洲精品v日韩精品| 色综合久久久久网| 中文字幕一区二区三区在线不卡| 国产麻豆视频一区| 久久女同互慰一区二区三区| 精品一区二区三区蜜桃| 欧美成人一区二区三区 | 欧美人xxxx| 亚洲午夜久久久久久久久电影院| 色综合久久久久久久久| 中文字幕一区二区三区不卡在线 | 色综合视频一区二区三区高清| 国产欧美日韩在线观看| 国产精品996| 国产欧美精品区一区二区三区| 国产在线看一区| 久久嫩草精品久久久久| 国产成人综合亚洲网站| 欧美国产精品一区| 成人18视频日本| 亚洲欧美日韩在线| 欧美午夜片在线观看| 天堂蜜桃91精品| 日韩精品一区二区三区四区视频| 男女男精品视频网| 久久毛片高清国产| 99久久夜色精品国产网站| 亚洲另类在线一区| 欧美日韩国产综合久久| 久久国产精品第一页| 欧美激情一区二区在线| 色婷婷av一区二区三区软件| 五月天久久比比资源色| 精品久久久久一区| 成人污污视频在线观看| 亚洲三级视频在线观看| 欧美亚洲国产一卡| 毛片av一区二区| 国产精品美女久久福利网站| 日本精品一区二区三区高清| 日韩在线一二三区| 久久综合一区二区| www.66久久| 日韩高清欧美激情| 欧美经典一区二区| 欧美三级欧美一级| 国产高清久久久| 尤物视频一区二区| 日韩精品一区二区三区蜜臀| 91在线视频免费观看| 蜜臀精品一区二区三区在线观看| 欧美激情一区二区三区不卡 | 午夜精品123| 久久综合九色综合97婷婷女人| 91麻豆蜜桃一区二区三区| 日日嗨av一区二区三区四区| 国产日韩欧美亚洲| 制服丝袜中文字幕一区| aaa亚洲精品| 韩国成人福利片在线播放| 一区二区在线观看不卡| 久久久蜜桃精品| 欧美日韩的一区二区| av动漫一区二区| 久久av中文字幕片| 亚洲一区二区免费视频| 国产精品色哟哟网站| 日韩亚洲欧美中文三级| 91久久精品一区二区三| 懂色av中文字幕一区二区三区| 日韩电影在线免费看| 亚洲三级久久久| 久久久国产精品不卡| 日韩一级完整毛片| 欧美日韩一区国产| 色综合一区二区三区| 成人午夜视频福利| 国产真实精品久久二三区| 日韩国产欧美在线视频| 亚洲一级二级三级在线免费观看| 中文字幕一区二区三区精华液| 久久一日本道色综合| 欧美一区二区三区免费在线看| 在线观看一区二区视频| 97aⅴ精品视频一二三区| 国产传媒久久文化传媒| 精品一二三四区| 蜜臀va亚洲va欧美va天堂 | 国产又黄又大久久| 美女精品自拍一二三四| 日本不卡高清视频| 日本少妇一区二区| 青青草原综合久久大伊人精品优势| 尤物av一区二区| 亚洲精品高清视频在线观看| 一区二区三区四区视频精品免费 | 欧美三级韩国三级日本三斤| 在线观看欧美精品| 欧美亚洲国产一区二区三区| 欧美日韩一级黄| 欧美精品日韩一本| 欧美一区二区三区在线观看| 日韩精品一区二区三区视频在线观看 | 91精品啪在线观看国产60岁| 欧美一区在线视频| 日韩欧美在线观看一区二区三区| 日韩一区二区三| 久久久久久久久一| 亚洲欧美在线高清| 一区二区在线免费观看| 日韩专区欧美专区| 久久se这里有精品| 不卡的电影网站| 欧美亚洲精品一区| 日韩一级高清毛片| 国产精品色噜噜| 亚洲欧美色综合| 免费高清在线视频一区·| 国产美女娇喘av呻吟久久| 不卡av在线网| 欧美日韩免费电影| 欧美一级欧美三级在线观看| 久久久久久久久99精品| 日韩美女视频一区| 日精品一区二区| 国产不卡视频在线观看| 色欧美日韩亚洲| 精品va天堂亚洲国产| 日韩一区欧美小说| 奇米影视一区二区三区| 成人夜色视频网站在线观看| 欧美色涩在线第一页| 久久久蜜桃精品| 亚洲午夜久久久久久久久电影网 | 久久久精品影视| 亚洲影视在线播放| 国产精品一区二区三区网站| 91福利区一区二区三区| 久久久久久久久久看片| 亚洲风情在线资源站| 国产精品一卡二卡在线观看| 欧美在线免费观看亚洲| 26uuu亚洲婷婷狠狠天堂| 尤物在线观看一区| 国产精品亚洲专一区二区三区| 在线亚洲高清视频| 国产日韩精品视频一区| 日韩综合在线视频| 99久久免费视频.com| 日韩精品自拍偷拍| 亚洲国产视频一区| av高清久久久| 久久久国际精品| 美女视频一区二区三区| 91国产福利在线| 国产精品国产精品国产专区不片 | 日本中文字幕不卡| 99国产精品久久久久| 精品奇米国产一区二区三区| 亚洲午夜久久久久久久久久久| av一区二区不卡| 久久精品综合网| 国产资源精品在线观看| 日韩你懂的电影在线观看| 夜夜操天天操亚洲| 色噜噜久久综合| 亚洲欧美偷拍另类a∨色屁股| 成人美女视频在线观看18| 精品国产电影一区二区| 男女激情视频一区| 欧美日本一区二区在线观看| 亚洲在线一区二区三区| 91色|porny| 亚洲欧美韩国综合色| 99re这里只有精品6| 中文字幕一区二区三区在线观看 | 国产成人日日夜夜| 久久久蜜桃精品| 国产成人av电影在线观看| 2020国产成人综合网|