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

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

?? main.pas

?? 編譯原理實驗 完整的
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
    begin FileFullName[i]:=FileName[i];i:=succ(i) end;
    FileFullName[i]:='.';
    for j:=1 to 3 do FileFullName[i+j]:=ExtName[j];
  end;
begin
  ReadFileName(SourceName);
  LinkExtName(FileFullName,SourceName,'PAS');
  assign(PAS,FileFullName);
  LinkExtName(FileFullName,SourceName,'IL1');
  assign(IL1,FileFullName);
  LinkExtName(FileFullName,SourceName,'IL2');
  assign(IL2,FileFullName);
  LinkExtName(FileFullName,SourceName,'IL3');
  assign(IL3,FileFullName);
  LinkExtName(FileFullName,SourceName,'PTC');
  assign(PTCode,FileFullName);
  LinkExtName(FileFullName,SourceName,'ASN');
  assign(ASN,FileFullName);
  LinkExtName(FileFullName,SourceName,'STR');
  assign(SFile,FileFullName);
  LinkExtName(FileFullName,SourceName,'DSP');
  assign(DSP,FileFullName);
end;

procedure WriteSTabToSFile;
  var tt:cardinal;
begin
  rewrite(SFile);
  for tt:=1 to ts do write(SFile,STab[tt]);
  close(SFile);
end;

procedure WriteTabToDsp(var DSP:text; p:pass);
  var t0,tt:cardinal;tp:StPtr;
       i,num:CodeLable;Cd:integer;OpCd:OperatingCode;
  function InsArgNum(OpCode:OperatingCode):cardinal;
  begin
    if OpCode in ZeroArgument
    then InsArgNum:=0
    else if OpCode in OneArgument
             then InsArgNum:=1
             else if OpCode in TwoArgument
                     then InsArgNum:=2
                     else InsArgNum:=3
  end;
begin
  if p=pass1
  then begin
         if p=pass1
         then begin
                writeln(DSP);
                writeln(DSP,'NTab','':5,'tn=',tn:1);
                for tt:=1 to tn do
                begin
                  if tt mod 5=1 then write(DSP,tt:7);
                  write(DSP,NTab[tt]:IdLength+2);
                  if tt mod 5=0 then writeln(DSP)
                end;
                writeln(DSP);writeln(DSP);
                writeln(DSP,'STab','':5,'ts=',ts:1);
                for tt:=1 to ts do
                begin
                  write(DSP,STab[tt]);if tt mod 80=0 then writeln(DSP)
                end;
                writeln(DSP)
              end;
         if p=pass3
         then begin
                writeln(DSP);
                writeln(DSP,'         Block Table');
                writeln(DSP,'         * * * * * * * * * * *');
                writeln(DSP);
                writeln(DSP,'order LastPar LasrId pSize VSize');
                for tt:=0 to tb do
                     with BTab[tt] do
                     writeln(DSP,tt:4,LastPar:8,LastId:8,ParSize:8,VarSize:8);
                writeln(DSP);
                writeln(DSP);
                writeln(DSP,'         Structural Table');
                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};

procedure LexicalAnalysis(var PAS:text;var IL1:ILFileType;var DSP:text);
begin
end;
procedure SyntaxAnalysis(var IL1,IL2:ILFileType;var DSP:text);
begin
end;
procedure SemanticAnalysis(var IL2,IL3:ILFileType;var DSP:text);
begin
end;
procedure CodeGeneration(var IL3:ILFileType; var PTCode:PTCFileType;
                             var DSP:text);
begin
end;
procedure AsmCodeGeneration(var PTCode:PTCFileType;var ASN:text);
begin
end;


begin{PaxCompoiler}
  Initialization;
  OpenFiles;
  {display number }
  writeln;writeln;
  writeln('PASCAL-D Multi-Pass Teaching Compiler');
  writeln('       Developed By ZhouWei          ');
  writeln('          Jan 1, 2003                ');
  {word anlysis}
  reset(PAS);rewrite(IL1);rewrite(DSP);
  PassHead(pass1); LexicalAnalysis(PAS,IL1,DSP);PassFinal;
  close(PAS);
  WriteTabToDsp(DSP,pass1);WriteSTabToSFile;
end.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合久久久| 一本大道久久a久久精品综合| 色国产综合视频| 成人免费小视频| 99久久久久久| 亚洲精品视频在线观看免费| 色婷婷综合久久久中文一区二区 | 国产91富婆露脸刺激对白| 久久久久久久精| 成人午夜精品一区二区三区| 亚洲欧洲日韩在线| 欧美午夜精品一区二区三区| 手机精品视频在线观看| 日韩精品一区二区三区三区免费| 久久精品国产精品亚洲精品| 久久久久久久综合色一本| av日韩在线网站| 国产高清无密码一区二区三区| 久久久久高清精品| 91天堂素人约啪| 五月天丁香久久| 精品国产成人系列| 成人一区二区在线观看| 国产精品美女久久久久av爽李琼 | 精品亚洲porn| 久久久久久麻豆| 成人h精品动漫一区二区三区| 国产精品国产自产拍高清av| 成人亚洲一区二区一| 国产精品乱码一区二三区小蝌蚪| 91网页版在线| 偷窥国产亚洲免费视频| 日韩天堂在线观看| 国产风韵犹存在线视精品| 亚洲柠檬福利资源导航| 欧美老女人第四色| 蜜臀精品一区二区三区在线观看 | 亚洲国产一区二区在线播放| 欧美日韩国产片| 老司机免费视频一区二区三区| 日韩欧美中文一区二区| 国产精品一区一区| 亚洲日本一区二区三区| 欧洲av一区二区嗯嗯嗯啊| 麻豆精品在线播放| 国产精品久久久久9999吃药| 91伊人久久大香线蕉| 天天做天天摸天天爽国产一区 | 久久一夜天堂av一区二区三区 | 欧美日韩在线直播| 美女一区二区视频| 中文成人综合网| 一区在线观看免费| 8x8x8国产精品| 国产乱子伦视频一区二区三区| 亚洲欧美日韩人成在线播放| 欧美在线免费播放| 成人激情电影免费在线观看| 亚洲一级二级在线| 久久久美女毛片 | 国产在线观看免费一区| 亚洲欧美日韩中文播放| 日韩视频在线永久播放| 北岛玲一区二区三区四区| 三级不卡在线观看| 中文字幕在线不卡一区| 欧美一卡2卡三卡4卡5免费| 99久久综合狠狠综合久久| 青青青伊人色综合久久| 亚洲色图清纯唯美| 亚洲精品一区二区三区影院| 欧美日韩精品免费| 国产成人免费视频一区| 日本少妇一区二区| 一区二区三区中文在线观看| 久久美女高清视频| 欧美久久久一区| 在线视频你懂得一区| 国产成人精品综合在线观看| 久久av资源站| 一区二区三区久久| 亚洲欧洲精品天堂一级| 久久精品一区二区| 欧美一区二区三区电影| 欧美日韩一区二区三区在线看| eeuss国产一区二区三区| 成人禁用看黄a在线| 国v精品久久久网| 黑人巨大精品欧美黑白配亚洲| 亚洲成人一二三| 一区二区在线观看视频在线观看| 久久久久青草大香线综合精品| 欧美第一区第二区| 欧美性生活大片视频| 欧美日韩一区二区三区免费看 | 欧美国产国产综合| 精品国产a毛片| 欧美大尺度电影在线| 欧美在线你懂得| 日韩一区二区三区观看| 69堂成人精品免费视频| 欧美日韩激情一区二区| 欧美日本一区二区三区四区| 欧美日韩一区二区三区四区 | 欧美v国产在线一区二区三区| 欧美一二三区在线| 日韩丝袜情趣美女图片| 日韩一区二区三区免费观看 | 在线视频国内一区二区| 国产伦精品一区二区三区免费 | 欧美日韩久久一区二区| 欧美日韩一区二区三区在线 | 国产精品中文有码| 国产老女人精品毛片久久| 国产成人在线观看| 成人黄色电影在线| 色综合色综合色综合| 欧美理论电影在线| 欧美精品日日鲁夜夜添| 久久久不卡影院| 最近中文字幕一区二区三区| 亚洲激情第一区| 亚洲aⅴ怡春院| 日韩av网站在线观看| 国精产品一区一区三区mba视频 | 蜜桃久久精品一区二区| 国内精品不卡在线| 丰满少妇在线播放bd日韩电影| 成人一级片网址| 精品视频在线视频| 欧美精品一区二区三区久久久| 欧美精品一区二区三区很污很色的 | 色伊人久久综合中文字幕| 欧美亚州韩日在线看免费版国语版| 欧美丰满高潮xxxx喷水动漫| 亚洲精品一区二区三区99| 中文字幕一区二区三区不卡| 亚洲图片自拍偷拍| 久久精品久久综合| av网站一区二区三区| 337p亚洲精品色噜噜狠狠| 国产欧美综合在线| 亚洲国产一区二区三区青草影视| 成人精品一区二区三区中文字幕| 精品污污网站免费看| 国产日韩欧美制服另类| 午夜av一区二区| 懂色中文一区二区在线播放| 欧美日韩一区二区三区四区| 国产精品白丝在线| 久久9热精品视频| 欧美色图一区二区三区| 欧美变态口味重另类| 亚洲综合色在线| 成人黄页毛片网站| 9191久久久久久久久久久| 亚洲免费观看高清完整版在线| 激情综合色综合久久| 欧洲亚洲精品在线| 国产精品美女久久福利网站| 免费人成在线不卡| 精品视频1区2区3区| 亚洲二区视频在线| 成人午夜激情在线| 久久丝袜美腿综合| 日韩精品成人一区二区在线| 欧洲av一区二区嗯嗯嗯啊| 精品久久久久久最新网址| 麻豆传媒一区二区三区| 欧美日韩在线一区二区| 成人免费一区二区三区视频| 国产999精品久久| 久久久久国产一区二区三区四区| 亚洲成在人线在线播放| 欧美日韩激情在线| 亚洲一区在线视频观看| 色综合天天综合狠狠| 亚洲国产精品高清| 国产一区欧美日韩| 7777精品久久久大香线蕉 | 首页国产丝袜综合| 欧美视频你懂的| 亚洲综合成人在线视频| 99re视频精品| 亚洲视频狠狠干| 成人中文字幕合集| 亚洲欧洲日韩一区二区三区| 99国产欧美另类久久久精品| 国产精品久久久久婷婷| 福利一区二区在线观看| 国产精品视频yy9299一区| 国产在线播精品第三| 久久久777精品电影网影网 | 久久综合九色综合97婷婷| 亚洲国产欧美日韩另类综合| 色综合av在线| 亚洲久草在线视频| 色久优优欧美色久优优| 亚洲精品一卡二卡| 欧美精品久久久久久久多人混战|