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

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

?? main.pas

?? 編譯原理實驗 完整的
?? PAS
?? 第 1 頁 / 共 4 頁
字號:
                writeln(DSP,'         * * * * * * * * * * *');
                writeln(DSP);
                writeln(DSP,'order size form');
                tp:=invptr;
                repeat
                  with tp^do
                  begin
                    write(DSP,order:4,size:7,StFormSp[form]:9);
                    case form of
  inv,ints,chars,bools
               :{no output};
  subranges:write(DSP,RangeType^.order:7,'(RangeTp)',
                       min:7,'(min)',max:7,'(max)');
  arrays:write(DSP,IndexType^.order:7,'(IndexTp)',
                       ElementType^.order:7,'(ElemtTp)');
  records:write(DSP,LastField:7,'(LastFld)')
            end{of case}
          end{of with};
          writeln(DSP);
          tp:=tp^.next
        until tp=nil;
      end;
  if p in [pass3,pass4]
  then begin
         writeln(DSP);
         writeln(DSP,'         Identifier Table');
         writeln(DSP,'         * * * * * * * * * * *');
         writeln(DSP);
         writeln(DSP,'order name type prevous class');
         if p=pass4 then write(DSP,'order name typ previous class');
         writeln(DSP);
         if p=pass3 then t0:=1 else t0:=18;
         for tt:=t0 to ti do
         with ITab[tt] do
         if(p=pass3)or((p=pass4)and(class in[procss,funcss]))then
         begin
           write(DSP,tt:4,name:4,'(',NTab[name],')',typ^.order:4,'(',
                     StFormSp[typ^.form],')',previous:4,IdClassSp[class]:9);
           case class of
             constss:write(DSP,val:7);
             typess:write(DSP);
             varss:write(DSP,address.StaticLevel:7,address.RelativeAddress:7,
                                  KindSp[kind]:7,IsControlvar:7);
             fieldss:write(DSP,IsStandp:7);
             procss:begin
                      write(DSP,IsStandp:7);
                      case IsStandf of
                        true:write(DSP,StandpSp[standp]:7);
                        false:write(DSP,plev:7,pEntry:7,pindex:7)
                      end
                    end;
             funcss:begin
                      write(DSP,IsStandf:7);
                      case IsStandf of
                        true:write(DSP,StandpSp[standp]:7);
                        false:write(DSP,plev:7,pEntry:7,pindex:7)
                      end
                    end;
           end{case};
           writeln(DSP)
         end{with};
         writeln(DSP)
       end;
  if p=pass4
  then begin
         writeln(DSP);
         writeln(DSP,'         Code Table');
         writeln(DSP,'         * * * * * * * * * * *');
         writeln(DSP);
         reset(PTCode);
         i:=0;
         while not eof(PTCode)do
         begin
           read(PTCode,Cd);OpCd:=OperatCd[Cd];
           write(DSP,i:5, OpCdSp[OpCd]:8);  i:=succ(i);
           for num:=1 to InsArgNum(OpCd) do
           if not eof(PTCode)
           then begin
                  read(PTCode,Cd);  write(DSP,Cd:6);   i:=succ(i)
                end;
           writeln(DSP);
         end;
         writeln(DSP);
         writeln(DSP);
         writeln(DSP,'         Lable Table');
         writeln(DSP,'         * * * * * * * * * * *');
         writeln(DSP);
         for tt:=1 to tl do
         begin
           write(DSP,LTab[tt]:5);  if tt mod 10=0 then writeln(DSP)
         end;
         writeln(DSP);
       end{Write Code Table and Lable Table}
  end;
end{WriteTabToDsp};


procedure PassHead(p:pass);
begin
    writeln;writeln(DSP);
    case p of
      pass1:begin
              writeln(    '* * * * * pass 1:Lexical Analysis * * * * *');
              writeln(DSP,'* * * * * pass 1:Lexical Analysis * * * * *')
            end;
      pass2:begin
              writeln(    '* * * * * pass 2:Syntax Analysis * * * * *');
              writeln(DSP,'* * * * * pass 2:Syntax Analysis * * * * *')
            end;
      pass3:begin
              writeln(    '* * * * * pass 3:Semantic Analysis * * * * *');
              writeln(DSP,'* * * * * pass 3:Semantic Analysis * * * * *')
            end;
      pass4:begin
              writeln(    '* * * * * pass 4:Code Generation * * * * *');
              writeln(    '          (Ideal Computer)');
              writeln(DSP,'* * * * * pass 4:Code Generation * * * * *');
              writeln(DSP,'          (Ideal Computer)')
            end;
      pass5:begin
              writeln(    '* * * * * pass 5:Assembly Code Generation * * * * *');
              writeln(    '                (Intel 8088)');
              writeln(DSP,'* * * * * pass 5:Assembly Code Generation * * * * *');
              writeln(DSP,'                (Intel 8088)')
            end;
    end{of case};
    writeln;writeln(DSP)
end{PassHead};


procedure PassFinal;
  var InOrBlank:packed array[1..2]of char;
begin
  if(ErrCount=0)and(overflow=[])
  then InOrBlank:='  '
  else InOrBlank:='IN';
  writeln(    InOrBlank:16,'CORRECT');
  writeln(DSP,InOrBlank:10,'CORRECT');
end{PassFinal};



{{{*******************************************************************}
{{{                        SECOND GROUP                               }
{{{*******************************************************************}
procedure GetSymbol(var f:ILFileType;var sy:symbol;p:pass);
  var c:cardinal;
begin
  read(f, SyPos.CharNumber,c);sy:=sym[c];
  if sy in [ident..strconst,boolconst]
  then case sy of
         ident     :read(f,IdIndex);
         intconst  :read(f,IValue);
         charconst :read(f,CValue);
         boolconst :read(f,BValue);
         strconst  :read(f,SEntry,SLength)
       end;{case}
  if(p=pass4)and(sy in [notop..eqop,becomes,unaryminus])
  then begin read(f,c); operandfm:=OpFm[c]  end
end{GetSymbol};

procedure PutSymbol(var f:ILFileType;var DSP:text;sy:symbol;p:pass);
  var ordd:cardinal;ordfm:cardinal;
begin
  ordd:=ord(sy);
  write(f,SyPos.CharNumber,ordd);
  with SyPos do
  write(DSP,LineNumber:4,CharNumber:3,ord(sy):4,'(',sp[sy],')');
  if sy in[ident..strconst,boolconst]
  then case sy of
         ident     :   begin write(f,IdIndex); write(DSP,IdIndex:4)  end;
         intconst  :   begin write(f,IValue);  write(DSP,IValue :4)  end;
         charconst :   begin write(f,CValue);  write(DSP,CValue :4)  end;
         boolconst :   begin write(f,BValue);  write(DSP,BValue :4)  end;
         strconst  :   begin write(f,SEntry,SLength);
                          write(DSP,SEntry:4,SLength:4)     end;
       end;{case}
  if(p=pass3)and(sy in [notop..eqop,becomes,unaryminus])
  then begin
         ordfm:=Ord(operandfm);
         write(f   ,ordfm);
         write(DSP ,Ord(operandfm):4,'(',OpFmSp[operandfm],')')
       end;
  writeln(DSP);
end;{PutSymbol}

procedure error(var DSP:text;SyPos:TextPos;n:cardinal;
                    var ErrCount:cardinal;p:pass);
begin
  ErrCount:=succ(ErrCount);
  with SyPos do
  begin
    if p<>pass1
    then writeln(    '   ERROR',n:3,'(',LineNumber:4,',',CharNumber:4,')');
         writeln(DSP,'   ERROR',n:3,'(',LineNumber:4,',',CharNumber:4,')');
  end
end;

procedure TabOverflow(tab:table;pos:TextPos);
begin
  if not(tab in overflow)
  then begin
         write('* * * * ');
         case tab of
           nametab  :write('Name table NTab');
           stringtab:write('String table STab');
           identtab :write('Identifier table ITab');
           blocktab :write('Block table BTab');
           codetab  :write('Code table');
           labletab :write('Lable table')
         end;
         writeln('overflow in line',pos.LineNumber:1);
         overflow:=overflow+[tab]
       end
end{TabOverflow};


{{{******************************************************************}
{{***********************LexicalAnalysis*****************************}
{{{******************************************************************}

procedure LexicalAnalysis(var PAS:text;var IL1:ILFileType;var DSP:text);
  const
    IdLengPlus1=11;
    rwnum=25;
  type
    charset=set of char;
  var
    ch         :char;
    ChPos      :TextPos;
    LastInLine :CharPos;
    EndScan    :Boolean;
    OnString   :Boolean;
    digits     :charset;
    letters    :charset;
    CharTotal  :cardinal;
    SymTotal   :cardinal;
    line       :array[CharPos]of char;
    ResWords   :array[1..rwnum]of
                  record
                    sp:alfa;
                    sy:symbol
                  end;
    frw        :array[1..IdLengPlus1]of cardinal;

procedure ScanError(n:cardinal);
begin
  write('* * * *');
  with SyPos do
  if CharNumber>=1
  then writeln('':CharNumber-8,'Error',n:1,'^')
  else writeln('':CharNumber,'^','Error',n:1);
  error(DSP,SyPos,n,ErrCount,Pass1);
end{scanError};

procedure InitResWords{and array frw};
begin
  frw[1]:=1;
  frw[2]:=1;
  with ResWords[1] do begin sp:='IF        '; sy:=ifsy         end;
  with ResWords[2] do begin sp:='OF        '; sy:=ofsy         end;
  with ResWords[3] do begin sp:='DO        '; sy:=dosy         end;
  with ResWords[4] do begin sp:='TO        '; sy:=tosy         end;
  with ResWords[5] do begin sp:='OR        '; sy:=orop         end;
  frw[3]:=6;
  with ResWords[6] do begin sp:='VAR       '; sy:=varsy        end;
  with ResWords[7] do begin sp:='FOR       '; sy:=forsy        end;
  with ResWords[8] do begin sp:='END       '; sy:=endsy        end;
  with ResWords[9] do begin sp:='NOT       '; sy:=notop        end;
  with ResWords[10]do begin sp:='AND       '; sy:=andop        end;
  with ResWords[11]do begin sp:='DIV       '; sy:=divop        end;
  with ResWords[12]do begin sp:='MOD       '; sy:=modop        end;
  frw[4]:=13;
  with ResWords[13]do begin sp:='TYPE      '; sy:=typesy       end;
  with ResWords[14]do begin sp:='THEN      '; sy:=thensy       end;
  with ResWords[15]do begin sp:='ELSE      '; sy:=elsesy       end;
  frw[5]:=16;
  with ResWords[16]do begin sp:='CONST     '; sy:=constsy      end;
  with ResWords[17]do begin sp:='BEGIN     '; sy:=beginsy      end;
  with ResWords[18]do begin sp:='WHILE     '; sy:=whilesy      end;
  with ResWords[19]do begin sp:='ARRAY     '; sy:=arraysy      end;
  frw[6]:=20;
  with ResWords[20]do begin sp:='DOWNTO    '; sy:=downtosy     end;
  with ResWords[21]do begin sp:='RECORD    '; sy:=recordsy     end;
  frw[7]:=22;
  with ResWords[22]do begin sp:='PROGRAM   '; sy:=programsy    end;
  frw[8]:=23;
  with ResWords[23]do begin sp:='FUNCTION  '; sy:=funcsy       end;
  frw[9]:=24;
  with ResWords[24]do begin sp:='PROCEDURE '; sy:=procsy       end;
  frw[10]:=25;
  frw[11]:=25
end{InitResWords};

procedure InitSets;
begin
  letters:=['A'..'Z'];  digits :=['0'..'9']
end{InitSets};

procedure InitNTab;
begin
  NTab[1] :='FALSE     ';NTab[2]   :='TRUE      ';NTab[3]   :='MAXINT    ';
  NTab[4] :='INTEGER   ';NTab[5]   :='CHAR      ';NTab[6]   :='BOOLEAN   ';
  NTab[7] :='ABS       ';NTab[8]   :='SQR       ';NTab[9]   :='ORD       ';
  NTab[10]:='CHR       ';NTab[11]  :='SUCC      ';NTab[12]  :='PRED      ';
  NTab[13]:='ODD       ';NTab[14]  :='READ      ';NTab[15]  :='READLN    ';
  NTab[16]:='WRITE     ';NTab[17]  :='WRITELN   ';
end{InitNTab};

procedure PutSy(sy:symbol);
begin
  SymTotal:=succ(SymTotal);
  if sy = ident then IdIndex :=NIndex;
  PutSymbol(IL1,DSP,sy,pass1)
end{PutSy};

procedure GetCh;
  procedure ReadNextLine;
    var i:cardinal;
  begin
    i:=1;
    while not eoln(PAS) and (i<illeng) do
    begin read(PAS,line[i]);  i:=succ(i)end;
    readln(PAS);
    line[i]:=' ';
    LastInLine:=i
  end{ReadNextLine};

  procedure ListThisLine;
    var i:cardinal;
  begin{ListThisLine}
    write(    ChPos.LineNumber:4,'');
    write(DSP,ChPos.LineNumber:4,'');
    for i:=1 to LastInLine do
    begin write(line[i]);   write(DSP,line[i])  end;
    writeln;  writeln(DSP)
  end{ListThisLine};

begin{GetCh}
  with ChPos do
  begin
    if CharNumber =LastInLine
    then begin
            PutSy(eoline);
            LineNumber:=succ(LineNumber);
            ReadNextLine;
            ListThisLine;
            CharNumber:=1;
            CharTotal :=CharTotal+LastInLine;
         end
    else CharNumber:=succ(CharNumber);
    ch:=line[CharNumber];
    if not OnString and (ch in['a'..'z'])
    then ch:=chr(ord('A')+ord(ch)-ord('a'));
    if eof(PAS) and (CharNumber=lastInLine) then EndScan :=true;
  end{with}
end{GetCh};



procedure identifier{or reserued word};
  var i,j,k :cardinal; spelling :alfa;
  procedure EnterNTab(name : alfa);
    function PosInNTab(name: alfa):cardinal;
      var i:cardinal;
    begin
      NTab[0]:=name;
      i:=tn;
      while name<>NTab[i] do i:=pred(i);
      PosInNTab:=i
    end{PosInNTab};
  begin{EnterNTab}
    NIndex :=PosInNTab(name);
    if NIndex =0
    then if tn = tnmax
         then TabOverflow(nametab,SyPos)
         else begin
                tn:=succ(tn); NTab[tn]:=name; NIndex:=tn
              end
  end{EnterNTab};

begin{identifier}
  spelling:='          ';
  k:=0;
  repeat
    if k<IdLength then begin k:=succ(k); spelling[k]:=ch end;
    GetCh
  until not (ch in (letters+digits));
  i:=frw[k]; j:=frw[k+1]-1;
  while(spelling<>ResWords[i].sp) and(i<=j) do i:=succ(i);
  if i<=j
  then sy:=ResWords[i].sy
  else begin sy:=ident;  EnterNTab(spelling) end;
  PutSy(sy)
end{identifier};

procedure number;
  var digit:integer;
begin{number}
  IValue:=0;
  repeat
    digit:=ord(ch)-ord('0');
    if IValue<=(MaxInt-digit) div 10
    then begin
           IValue:=IValue * 10 + digit;  GetCh
         end

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人综合在线播放| 欧美电影免费观看高清完整版在线| 国产麻豆一精品一av一免费 | 中文字幕一区不卡| 久久久高清一区二区三区| 精品福利一区二区三区免费视频| 欧美一区二区三区四区久久| 3d成人h动漫网站入口| 精品1区2区3区| 7777精品伊人久久久大香线蕉的 | 久久精品国产亚洲高清剧情介绍| 日本不卡的三区四区五区| 日韩电影在线观看一区| 日韩电影在线一区| 黄页网站大全一区二区| 狠狠色丁香久久婷婷综| 高清视频一区二区| 大胆亚洲人体视频| 色婷婷一区二区三区四区| 欧美午夜在线观看| 在线不卡免费欧美| 欧美mv和日韩mv的网站| 久久精品一区八戒影视| 中文字幕一区三区| 亚洲永久免费av| 另类综合日韩欧美亚洲| 国产成人综合在线| 91黄色激情网站| 666欧美在线视频| 久久先锋资源网| 中文字幕在线观看一区| 亚洲国产人成综合网站| 蜜臀av一区二区在线免费观看| 国产精品996| 色哟哟欧美精品| 欧美一区二区精品在线| 久久精品视频免费| 亚洲精品国产视频| 日本成人超碰在线观看| 国产精品996| 欧美性高清videossexo| 精品免费视频.| 悠悠色在线精品| 激情六月婷婷久久| 91美女片黄在线| 日韩天堂在线观看| 日韩理论在线观看| 久久99国产精品免费| 99在线精品观看| 日韩午夜三级在线| 玉米视频成人免费看| 久久se这里有精品| 91麻豆免费看片| 精品国产免费一区二区三区香蕉| 亚洲欧美日韩在线不卡| 久久91精品国产91久久小草| 一本色道综合亚洲| 久久综合九色综合97婷婷女人 | 激情综合网最新| 色婷婷亚洲精品| 国产午夜亚洲精品午夜鲁丝片 | 青青青爽久久午夜综合久久午夜| 国产a级毛片一区| 欧美高清www午色夜在线视频| 国产日本欧美一区二区| 日韩精品一级二级| 91搞黄在线观看| 国产精品国产三级国产| 老司机免费视频一区二区| 在线观看日韩电影| 国产精品久久久久久久午夜片| 蜜桃视频第一区免费观看| 欧美在线啊v一区| 国产精品久久久久久户外露出 | 亚洲欧洲成人精品av97| 日韩精品一二三| 色综合久久久久久久久| 国产欧美日韩精品a在线观看| 日韩av网站在线观看| 色天使久久综合网天天| 国产精品久久久久久久久搜平片| 美女网站在线免费欧美精品| 在线观看日韩电影| 亚洲私人黄色宅男| 大胆欧美人体老妇| 国产欧美日本一区视频| 久久国产精品72免费观看| 51精品秘密在线观看| 亚洲精品老司机| 色综合咪咪久久| 成人欧美一区二区三区| 成人国产亚洲欧美成人综合网 | 亚洲国产日韩a在线播放| 91欧美一区二区| 国产精品妹子av| 成人午夜视频免费看| 久久久久久综合| 国产在线看一区| 久久久国产一区二区三区四区小说| 毛片不卡一区二区| 欧美一区二区黄| 青草av.久久免费一区| 欧美美女bb生活片| 亚洲高清久久久| 91精品国产综合久久久久久漫画| 午夜av区久久| 欧美精品久久久久久久多人混战| 午夜国产精品一区| 欧美一区在线视频| 美腿丝袜亚洲三区| 久久婷婷成人综合色| 国产一区二区三区视频在线播放| 久久综合九色综合久久久精品综合| 国产麻豆成人精品| 中文av一区二区| 91麻豆国产在线观看| 一区二区三区不卡视频在线观看| 在线精品视频一区二区三四| 亚洲综合成人在线| 4hu四虎永久在线影院成人| 日本成人在线网站| 久久精品视频免费| 91麻豆国产香蕉久久精品| 亚洲午夜国产一区99re久久| 欧美一区三区四区| 日韩一区二区三区在线视频| 日韩成人av影视| 欧美精品一区男女天堂| 丰满少妇久久久久久久| 亚洲色图另类专区| 欧美日韩一区二区欧美激情| 麻豆国产91在线播放| 国产欧美精品日韩区二区麻豆天美| 成人午夜在线播放| 亚洲影院久久精品| 欧美成人vps| 91啪亚洲精品| 免费三级欧美电影| 国产日韩高清在线| 精品污污网站免费看| 久草精品在线观看| 亚洲人成精品久久久久久| 欧美一区二区三区系列电影| 国产成人av一区| 亚洲午夜免费视频| wwwwxxxxx欧美| 色综合久久66| 久久99热国产| 亚洲美女屁股眼交| 日韩美一区二区三区| 99精品欧美一区二区蜜桃免费| 性做久久久久久久久| 国产日韩欧美在线一区| 欧美色偷偷大香| 国产成人午夜视频| 午夜电影一区二区三区| 国产精品婷婷午夜在线观看| 欧美日韩高清影院| 大尺度一区二区| 日韩中文字幕亚洲一区二区va在线| 久久精品欧美一区二区三区麻豆| 欧美在线free| 成人av网址在线| 免费看日韩a级影片| 亚洲三级在线免费观看| 久久午夜羞羞影院免费观看| 在线观看一区二区精品视频| 国产高清不卡一区| 丝袜诱惑亚洲看片| 亚洲欧美一区二区久久| 欧美精品一区二区三区蜜臀| 欧美性猛交xxxx乱大交退制版| 日韩精品专区在线影院重磅| 日本乱人伦一区| 国产不卡一区视频| 久久99精品久久久久久国产越南| 亚洲精品成人悠悠色影视| 久久久久97国产精华液好用吗| 欧美日韩在线播放一区| av不卡在线观看| 国产九色sp调教91| 蜜桃av一区二区在线观看| 亚洲制服欧美中文字幕中文字幕| 中文字幕的久久| www亚洲一区| 精品福利一二区| 日韩免费电影一区| 日韩一级片在线观看| 欧美三级视频在线| 91成人网在线| 色综合天天天天做夜夜夜夜做| 懂色一区二区三区免费观看| 狠狠色狠狠色综合日日91app| 日韩av一区二区在线影视| 亚洲国产精品久久不卡毛片| 亚洲欧美日韩小说| 亚洲欧美成aⅴ人在线观看| 国产日韩欧美a| 国产日韩欧美电影| 欧美经典一区二区|