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

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

?? pl0_02.pas

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

label 99;

const wordmax=13;     {of reserved words}
      idTbmax=100;    {length of identifier table}
      numbmax=14;     {max number of digits in numbers}
      idLength=10;    {length of identifiers}
      addrmax=2047;   {maximun address}
      levelmax=3;     {max depth of block nesting}
      codemax=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);
      alfa = packed array [1..idLength] 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..levelmax;
                      a : 0..addrmax;
                    end;

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

  last_read_num : integer;   (* last number read*)
  char_count : integer;     (* character count *)
  line_length : integer;     (* line length *)
  kk: integer;
  code_index: integer;      (*code allocation index *)
  line: array[1..81] of char;
  a : alfa;
  code : array[0..codemax] of instruction;
  word : array[1..wordmax] of alfa;
  wsym : array[1..wordmax] 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..idTbmax] 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;}
  fname:string;
  err:integer;

{出錯處理,打印出錯位置和錯誤編碼}
procedure error(n:integer);        {************************************1111}
 begin
  case n of
   1: writeln(fa,'Declare constant error,must be =,not := ', ' ' : char_count-1,'!',n:2);
   2: writeln(fa,'constant declaration ''='' must be followed by = ', ' ' : char_count-1,'!',n:2);
   3: writeln(fa,'constant identify must be followed by = ', ' ' : char_count-1,'!',n:2);
   4: writeln(fa,'must be identify followed by const,var,procedure',' ' : char_count-1,'!',n:2);
   5: writeln(fa,'maybe lost , or ;',' ',char_count-1,'!',n:2);
   6: writeln(fa,'lost begin string of statement or procedur define;',' ',char_count-1,'!',n:2);
   7: writeln(fa,'must be begin string of statement',' ',char_count-1,'!',n:2);
   8: writeln(fa,'statement''s following char is incorrect',' ',char_count-1,'!',n:2);
   9: writeln(fa,'must use . to end the program ',' ',char_count-1,'!',n:2);
   10:writeln(fa,'lost ; ',' ',char_count-1,'!',n:2);
   11:writeln(fa,'id maybe not defined ',' ',char_count-1,'!',n:2);
   12:writeln(fa,'Becomes''s left id must be var',' ',char_count-1,'!',n:2);
   13:writeln(fa,'var must followed by := in becomes statement ',' ',char_count-1,'!',n:2);
   14:writeln(fa,'call must be followed by id',' ',char_count-1,'!',n:2);
   15:writeln(fa,'call must be followed by proc id ',' ',char_count-1,'!',n:2);
   16:writeln(fa,'lost then ',' ',char_count-1,'!',n:2);
   17:writeln(fa,'lost end or ;',' ',char_count-1,'!',n:2);
   18:writeln(fa,'lost do in the while statement',' ',char_count-1,'!',n:2);
   19:writeln(fa,'statement followed by incorrect char',' ',char_count-1,'!',n:2);
   20:writeln(fa,'must be relation opr ',' ',char_count-1,'!',n:2);
   21:writeln(fa,'must not be var,not proc in the expression statement',' ',char_count-1,'!',n:2);
   22:writeln(fa,'lost ) ',' ',char_count-1,'!',n:2);
   23:writeln(fa,'factor followed by incorrect char ',' ',char_count-1,'!',n:2);
   24:writeln(fa,'expression begin char error',' ',char_count-1,'!',n:2);
   31:writeln(fa,'number out of ranger',' ',char_count-1,'!',n:2);
   32:writeln(fa,'read statement must be var in ()',' ',char_count-1,'!',n:2);
  end;
  err:=err+1   {?}
 end  (*error*);

{詞法分析,讀取一個單詞}
 procedure getsym;                   {************************************1111}
 var i,j,k:integer;


   procedure getch;                        {getch:過濾空格,讀取一個字符}
   begin
     if char_count=line_length then
       begin
         if eof(fin) then
           begin
             write('program incomplete');
             (********************************goto 99;*)
           end;
         line_length := 0;
         char_count := 0;
         write(code_index:4,' ');
         write(fa1,code_index:4,'');
         while not eoln(fin) do
           begin
	   line_length:=line_length+1;
	   read(fin,ch);
	   write(ch);
	   write(fa1,ch);
	   line[line_length]:=ch
           end;
         writeln;
         line_length:=line_length+1;
         read(fin,line[line_length]);
         writeln(fa1);
       end;
       char_count:=char_count+1;
       ch:=line[char_count]
   end(*getch*);

 begin(*getsym*)
   while ch in [' ',#13,#10] do getch;
   if ch in ['a'..'z'] then
     begin               (*id or reserved word*)

       k:=0;
       repeat
         if k<idLength then  {idLength=10}
           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;{get identify and store it into id }

       i:=1;
       j:=wordmax;{wordmax=13}
       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]   {reserved word}
       else sym:=ident              {identifier }

     end  {ch in a..z}

   else if ch in['0'..'9'] then
     begin(*number*)
       k := 0;
       last_read_num := 0;
       sym := number;
       repeat
         last_read_num := 10 * last_read_num + (ord(ch) - ord('0'));
         k := k+1;
         getch;
       until not(ch in['0'..'9']);

       if k > numbmax then error(30);
     end {ch in 0..9}

   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:=gtr
     end

   else
     begin
       sym:=ssym[ch];
       getch
     end

 end(* getsym *);


{生成目標代碼,并送入目標程序區(qū)}
procedure gen(x:fct;y,z:integer);      {*********************************1111}
  begin
    if code_index > codemax then
      begin
        write('program too long');
        {goto 99}exit
      end;
      with code[code_index] do
        begin
          f:=x;
          l:=y;
          a:=z
        end;
        code_index:=code_index+1
      end(* gen *);

{測試當前單詞符號是否合法}
procedure test(s1,s2:symset;n:integer);  {*******************************1111}
 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);  {**************************1111}
var dx:integer;   (* data allocation index *)
   tx0:integer;   (* initial table index *)
   cx0:integer;   (* initial code  index*)


procedure enter(k:obj);                {enter:登錄名字表============2222}
begin (* enter object into table *)
  tx:=tx+1;
  with table[tx] do
  begin
     name:=id;
     kind:=k;
     case k of
      constant:begin
	  if last_read_num>addrmax
           then
	    begin
             error(31);
             last_read_num:=0;
	    end;
          val:=last_read_num
           end;
variable:begin
           level:=lev;
           adr:=dx;
           dx:=dx+1;
           end;
      procedur:level:=lev
        end
    end
end(* enter *);



function  position(id:alfa):integer;
                             {position:查找標識符在名字表中的位置==2222}
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;  {constdeclaration:常量定義處理========2222}
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;    {vardeclaration:變量說明處理===========2222}
 begin
   if sym=ident then
    begin
     enter(variable);
     getsym
    end
   else error(4)
 end(*vardeclaration*);

procedure listcode;          {listcode:列目標代碼清單==============2222}
var i:integer;
begin  (*list code generated for this block*)
  if listswitch then
  begin
    for i:=cx0 to code_index-1 do
      with code[i] do
      begin
        writeln(fa,i:4,' ',mnemonic[f]:5,l:3,a:5)
      end;
  end;
end(*listcode*);

procedure statement(fsys:symset);
                             {=========statement:語句部分處理=====2222}
var i,cx1,cx2:integer;

procedure expression(fsys:symset);     {-----expression declare--}
var addop:symbol;

procedure term(fsys:symset);           {****term declare****}
var mulop:symbol;

procedure factor(fsys:symset);         {****factor declare*****}
var i:integer;
begin                              {****factor proceesing*****5555}
  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 last_read_num>addrmax then
      begin
        error(31);
        last_read_num:=0;
      end;
      gen(lit,0,last_read_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*)                            {****term proceesing*****4444}
  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 proceesing--3333}
  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);      {---condition processing------3333}
var relop:symbol;
begin
  if sym=oddsym then
  begin
    getsym;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美大肚乱孕交hd孕妇| 亚洲国产综合人成综合网站| 精品欧美乱码久久久久久1区2区| 欧美一卡二卡三卡| 精品免费视频.| 日韩色在线观看| 久久亚洲私人国产精品va媚药| 精品美女一区二区三区| 久久久久国产精品厨房| 国产色爱av资源综合区| 国产精品久久午夜夜伦鲁鲁| 亚洲精品自拍动漫在线| 亚洲国产精品视频| 奇米亚洲午夜久久精品| 韩国女主播一区| 成人激情小说乱人伦| 91农村精品一区二区在线| 欧美婷婷六月丁香综合色| 3d动漫精品啪啪一区二区竹菊| 日韩欧美aaaaaa| 国产精品热久久久久夜色精品三区| 日韩美女视频一区二区| 亚洲国产日韩av| 久久精品99久久久| 国产91精品露脸国语对白| 91浏览器在线视频| 欧美精品一卡两卡| 久久伊人蜜桃av一区二区| 18欧美乱大交hd1984| 亚洲成人你懂的| 国产精品一二一区| www.av精品| 制服丝袜一区二区三区| 久久久久久久久久久99999| 亚洲欧洲制服丝袜| 蜜臀91精品一区二区三区| 成人v精品蜜桃久久一区| 欧美色欧美亚洲另类二区| 日韩欧美一区在线| 亚洲精品第1页| 国产一区在线观看麻豆| 91久久线看在观草草青青| 欧美电视剧在线看免费| 一区精品在线播放| 久久99精品久久久久久国产越南| 99久久国产综合精品麻豆| 69久久99精品久久久久婷婷| 欧美极品aⅴ影院| 日韩黄色在线观看| www.成人网.com| 日韩欧美国产wwwww| 日韩理论片一区二区| 男人的j进女人的j一区| 99久久精品情趣| 欧美成人a∨高清免费观看| 一区二区三区在线视频播放| 狠狠色丁香婷婷综合久久片| 欧美三级日韩三级国产三级| 中日韩免费视频中文字幕| 麻豆精品一区二区三区| 欧美在线视频日韩| 国产日产欧美一区| 青青草97国产精品免费观看无弹窗版 | 久久精品一区二区三区四区| 亚洲精品中文在线观看| 国产精品一区二区视频| 欧美另类一区二区三区| 欧美激情中文不卡| 美女mm1313爽爽久久久蜜臀| 精品视频资源站| 亚洲三级电影全部在线观看高清| 国产伦精品一区二区三区免费 | 欧美日韩精品二区第二页| 国产精品少妇自拍| 国产在线观看一区二区| 欧美欧美午夜aⅴ在线观看| 亚洲裸体在线观看| 成人一区二区视频| 精品999在线播放| 日韩国产欧美在线播放| 欧美性欧美巨大黑白大战| 亚洲欧美成人一区二区三区| 国产成人在线视频网址| 精品国产区一区| 欧美a级理论片| 日韩欧美一级精品久久| 三级亚洲高清视频| 欧美日韩视频在线第一区| 一个色在线综合| 色综合久久中文综合久久牛| 国产精品久久久一区麻豆最新章节| 国产在线看一区| 日韩欧美激情一区| 日本不卡高清视频| 日韩三级伦理片妻子的秘密按摩| 婷婷中文字幕综合| 欧美精品乱码久久久久久| 亚洲不卡在线观看| 欧美日韩视频在线第一区| 亚洲一区在线视频| 欧美伊人久久久久久午夜久久久久| 亚洲欧美偷拍三级| 在线观看亚洲成人| 亚洲国产精品一区二区久久 | 91福利视频网站| 一区二区三区毛片| 欧美亚洲综合网| 香蕉影视欧美成人| 日韩免费视频线观看| 久久成人免费网| 亚洲成a人在线观看| 欧美视频三区在线播放| 午夜国产精品影院在线观看| 884aa四虎影成人精品一区| 天天操天天综合网| 日韩亚洲欧美中文三级| 韩国三级电影一区二区| 国产精品污网站| 91黄视频在线| 日韩电影免费在线| 久久午夜免费电影| 成人激情动漫在线观看| 洋洋成人永久网站入口| 在线播放欧美女士性生活| 久久69国产一区二区蜜臀| 国产亚洲人成网站| 色婷婷亚洲精品| 日日嗨av一区二区三区四区| 2021久久国产精品不只是精品| 成人免费毛片片v| 亚洲精品久久嫩草网站秘色| 91精品国产91热久久久做人人| 国产大陆精品国产| 一区二区三区av电影| 日韩欧美国产系列| 北岛玲一区二区三区四区| 亚洲一二三四久久| 精品1区2区在线观看| 91美女在线看| 美女网站在线免费欧美精品| 欧美激情一区二区三区| 欧美日韩一区高清| 国产乱子伦视频一区二区三区| 亚洲精品高清视频在线观看| 欧美电影免费观看高清完整版在线| 成人av综合一区| 日韩国产欧美在线观看| 中文字幕高清不卡| 欧美肥妇bbw| 欧美变态口味重另类| 99国内精品久久| 久色婷婷小香蕉久久| 亚洲色图第一区| 精品国产免费视频| 欧美伊人精品成人久久综合97| 国产一区欧美一区| 亚洲国产精品久久久男人的天堂| 久久亚洲私人国产精品va媚药| 欧美在线观看一区二区| 国产一区二区精品久久99| 亚洲一二三区在线观看| 国产情人综合久久777777| 制服丝袜成人动漫| 99久久777色| 国产精品综合久久| 三级久久三级久久久| 中文字幕一区av| 久久久亚洲国产美女国产盗摄| 欧美日韩成人综合在线一区二区| 国产不卡免费视频| 久久国产精品99精品国产| 亚洲午夜私人影院| 国产精品色婷婷久久58| ww亚洲ww在线观看国产| 欧美日韩国产综合视频在线观看| 成人18精品视频| 国产一本一道久久香蕉| 日韩精品一二三| 亚洲免费观看高清完整版在线 | 一本到不卡精品视频在线观看 | 日韩精品一区二区三区在线观看| 在线亚洲欧美专区二区| 成人伦理片在线| 国产一区二区三区精品视频| 日韩精品乱码av一区二区| 亚洲女与黑人做爰| 国产精品人成在线观看免费| 久久久久久影视| 日韩欧美中文字幕一区| 欧美一区二区三区在线视频| 欧美亚洲综合网| 色伊人久久综合中文字幕| 成人av在线电影| 风流少妇一区二区| 国模娜娜一区二区三区| 精品一区二区三区免费观看| 日韩经典中文字幕一区| 日韩国产欧美在线播放| 日韩精品国产精品| 五月婷婷欧美视频|