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

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

?? word.pas

?? 編譯原理實驗 完整的
?? PAS
字號:
program PaxCompoiler(input,output);

  const
    IdLength=10;
    maxint=16383;
    illeng=81;
    tnmax=70;
    tsmax=200;
    timax=80;
    tbmax=10;
    tcmax=1023;
    tlmax=255;

  type
    symbol=({ 0}ident,intconst,charconst,strconst,programsy,
            { 5}constsy,typesy,varsy,procsy,funcsy,beginsy,ifsy,
            {12}whilesy,forsy,endsy,thensy,elsesy,ofsy,dosy,
            {19}tosy,downtosy,arraysy,recordsy,notop,times,divop,
            {26}modop,andop,plus,minus,orop,lsop,leop,gtop,
            {34}geop,neop,eqop,lparent,rparent,lbracket,rbracket,
            {41}comma,semicolon,period,colon,becomes,range,
            {47}eoline,eofile,other,call,empty,boolconst,
            {53}unaryminus);
    symset=set of symbol;
    cardinal=0..maxint;
    ILFileType=file of cardinal;
    pass=(pass1,pass2,pass3,pass4,pass5);
    CharPos=0..illeng;
    TextPos=record
              LineNumber:0..9999;
              CharNumber:CharPos
            end;
    alfa=packed array[1..IdLength] of char;
    alfa10=packed array[1..10] of char;
    alfa6=packed array[1..6] of char;
    OperandForm=(invalid,invinv,strstr,invint,intinv,intint,
                 invbool,boolinv,boolbool,invchar,charinv,charchar,
                 invarr,arrinv,arrarr,invrec,recinv,recrec);
    table=(nametab,stringtab,identtab,blocktab,codetab,labletab);
  var
    SyPos:TextPos;
    ErrCount:cardinal;
    NTab:array[0..tnmax]of alfa;
    STab:array[0..tsmax]of char;
    {ITab:array[0..timax]of identifier;
    BTab:array[0..tbmax]of BTabTerm;
    CTab:array[0..tcmax]of integer;
    LTab:array[0..tlmax]of cardinal;}
    NIndex:cardinal;
    IdIndex:cardinal;
    sy:symbol;
    sp:array[symbol] of alfa10;
    IValue:cardinal;
    BValue:cardinal;
    CValue:cardinal;
    SEntry:cardinal;
    SLength:cardinal;
    operandfm:OperandForm;
    OpFmSp:array[OperandForm]of alfa6;
    tn:cardinal;
    ts:cardinal;
    overflow:set of table;

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 PutSymbol(var f:ILFileType;var DSP:text;sy:symbol;p:pass);
begin
  {write(f,SyPos.CharNumber,ord(sy));}
  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
         {write(f   ,Ord(operandfm));}
         write(DSP ,Ord(operandfm):4,'(',OpFmSp[operandfm],')')
       end;
  writeln(DSP);
end;{PutSymbol}

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;

{{{******************************************************}
{{{*****************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
    else begin
           ScanError(2);
           IValue:=maxint;
           repeat GetCh until not (ch in digits)
         end
    until not (ch in digits);
    if ch in letters then ScanError(3);
    PutSy(intconst);
  end{number};

  procedure string0;
    var ch1,ch2 :char;  MissRight:Boolean;
    procedure EnterSTab;
      var tsPlusSLength:cardinal;
    begin{EnterSTab};
      tsPlusSLength:=ts+SLength;
      if tsPlusSLength>tsmax
      then TabOverflow(stringtab,SyPos)
      else
        STab[tsPlusSLength]:=ch1
    end{EnterSTab};
  begin{string}
    OnString:=true;
    SLength:=0;
    GetCh;  ch2:=ch;
    repeat
      ch1:=ch2;
      MissRight:=ChPos.CharNumber=LastInLine;
      if not MissRight
      then begin
             GetCh; ch2:=ch;
             if(ch1<>'"')or(ch1='"')and(ch2='"')
             then begin
                    SLength:=succ(SLength);
                    EnterSTab;
                    if(ch1='"')and(ch2='"')
                  then begin ch1:=' ';  GetCh; ch2:=ch end
                  end
           end
    until (ch1='"')or MissRight;
    if MissRight
    then begin  ScanError(4);  GetCh  end
    else if SLength<=1
         then begin
                if SLength=0 then ScanError(4);
                CValue:=ord(STab[succ(ts)]);
                PutSy(charconst)
              end
         else begin
                sEntry:=succ(ts);
                PutSy(strconst);
                if not (stringtab in overflow)then ts:=ts+SLength
              end;
    OnString:=false
  end{string};


procedure comment1;
  var ch1,ch2  :char;  MissRight:Boolean;
begin{comment1}
  GetCh;  ch2:=ch;
  repeat
    ch1:=ch2;
    MissRight:=ChPos.CharNumber=LastInLine;
    if MissRight
    then ScanError(5)
    else begin  GetCh;  ch2:=ch  end;
  until(ch1='*') and (ch2=')') or MissRight;
  if not(eof(PAS)and MissRight) then Getch
end{comment1};

procedure comment2;
  var MissRight: Boolean;
begin{comment2}
  repeat
    GetCh;
    MissRight:=ChPos.CharNumber=LastInLine;
    if MissRight then ScanError(5);
  until(ch='}')or MissRight;
  if not(eof(PAS)and MissRight)then GetCh
end{comment2};

procedure scan;
  var LegalFirstChar:set of char;
begin
  LegalFirstChar:=letters+digits+[' ','"','+','-','*',
       '<','=','>','{','(',')','[',']','.',':',',',';'];
  while not EndScan do
  begin
    SyPos:=ChPos;
    if ch in LegalFirstChar
    then case ch of
  ' '   :GetCh;
  'A','B','C','D','E','F','G','H','I','J','K','L','M',
  'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
        :identifier{or reserved word};
  '1','2','3','4','5','6','7','8','9'
        :number;
  '"'   :string0;
             {2-xharacter special symbols}
  '<'   :begin
           GetCh;
           if ch='='
           then begin PutSy(leop); GetCh end
           else if ch='>'
                then begin PutSy(neop); GetCh end
                else PutSy(lsop)
         end;
  '>'   :begin
           GetCh;
           if ch='='
           then begin PutSy(geop); GetCh end
           else PutSy(gtop)
         end;
  ':'   :begin
           GetCh;
           if ch='='
           then begin PutSy(becomes); GetCh end
           else PutSy(colon)
         end;
  '.'   :begin
           GetCh;
           if ch='='
           then begin PutSy(range); GetCh end
           else PutSy(period)
         end;
  '('   :begin
           GetCh;
           if ch='*' then comment1 else PutSy(lparent)
         end;
  '{'   :comment2;
  '+'   :begin PutSy(plus);         GetCh end;
  '-'   :begin PutSy(minus);        GetCh end;
  '*'   :begin PutSy(times);        GetCh end;
  '='   :begin PutSy(eqop);         GetCh end;
  ')'   :begin PutSy(rparent);      GetCh end;
  '['   :begin PutSy(lbracket);     GetCh end;
  ']'   :begin PutSy(rbracket);     GetCh end;
  ','   :begin PutSy(comma);        GetCh end;
  ';'   :begin PutSy(semicolon);    GetCh end;
         end{case}
      else begin PutSy(other);  ScanError(1);  GetCh end
    end{while}
  end{scan};
begin{LexicalAnalysis}
  InitResWords;
  InitSets;
  InitNTab;
  ts  :=0;
  tn  :=17;
  Chartotal:=0;   SymTotal:=0;
  EndScan:=false; OnString:=false;
  with ChPos do begin LineNumber:=0;  CharNumber :=0 end;
  with SyPos do begin LineNumber:=0;  CharNumber :=0 end;
  LastInLine:=0;
  GetCh;
  scan;
   PutSy(eofile);
  writeln(DSP);
  writeln(DSP,'    line total     =',ChPos.LineNumber : 1);
  writeln(DSP,'    character total=',CharTotal: 1);
  writeln(DSP,'    symbol total   =',SymTotal : 1);
end{LexicalAnalysis};



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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲精品国产精品紫薇| 久久精品视频一区二区三区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲一区日韩精品中文字幕| 97aⅴ精品视频一二三区| 中文字幕av在线一区二区三区| 国产成人精品免费网站| 国产欧美日韩综合精品一区二区| 成人美女在线视频| 亚洲色图欧洲色图婷婷| 欧美日韩精品一区二区天天拍小说 | 亚洲精品一区二区三区精华液| 国产一区二区三区精品视频| 国产偷国产偷精品高清尤物| 99久久综合国产精品| 亚洲嫩草精品久久| 欧美三级中文字幕在线观看| 青青草国产成人av片免费| 91精品国产综合久久香蕉麻豆| 国产真实乱对白精彩久久| 国产精品日韩成人| 欧美日本国产视频| 国产乱码精品一区二区三区忘忧草| 欧美激情一区二区| 欧美日韩国产一级二级| 精品亚洲porn| 亚洲精品视频观看| 欧美电影免费观看高清完整版在线| 国产乱子轮精品视频| 亚洲欧美日韩电影| 日韩一区二区三区四区| 不卡的电影网站| 日本亚洲电影天堂| 国产精品国产精品国产专区不片| 欧美色图12p| 国产69精品久久777的优势| 午夜精品aaa| 亚洲欧洲日韩av| 精品国产91久久久久久久妲己| 在线欧美小视频| 国产一区二区三区蝌蚪| 午夜欧美一区二区三区在线播放| 久久一区二区三区国产精品| 欧美性大战久久| 成人激情文学综合网| 蜜桃视频一区二区三区在线观看| 成人欧美一区二区三区白人| 精品国产髙清在线看国产毛片| 在线免费亚洲电影| 国产99精品国产| 精品亚洲欧美一区| 偷偷要91色婷婷| 一级做a爱片久久| 国产精品白丝在线| 久久精品欧美一区二区三区不卡 | 欧美激情一区二区三区在线| 欧美精选一区二区| 色婷婷精品久久二区二区蜜臀av| 精品一区二区三区免费视频| 视频一区免费在线观看| 亚洲欧美激情在线| 国产精品亲子伦对白| 国产亚洲午夜高清国产拍精品| 日韩欧美亚洲国产另类| 欧美一区日韩一区| 3d动漫精品啪啪1区2区免费| 欧洲精品在线观看| 色香蕉成人二区免费| 99久久精品免费看| 成人黄色av电影| 成人中文字幕电影| 成人app在线观看| 成人午夜免费av| 成人h动漫精品| 国产成人aaa| 成人黄色免费短视频| 国产一区二区三区久久悠悠色av| 国产又黄又大久久| 国产剧情一区二区| 国产aⅴ精品一区二区三区色成熟| 国内久久婷婷综合| 国产一区二区三区四区五区美女| 国产中文一区二区三区| 国模娜娜一区二区三区| 国产精品综合久久| 成人白浆超碰人人人人| 91麻豆免费视频| 欧美色精品天天在线观看视频| 欧美在线视频日韩| 欧美一区二区三区在| 精品蜜桃在线看| 国产精品视频第一区| 《视频一区视频二区| 一区二区成人在线| 午夜电影网亚洲视频| 日韩精品午夜视频| 久久99精品久久久久久久久久久久| 久久9热精品视频| 国产一区在线观看麻豆| 成人激情视频网站| 欧美日韩一区 二区 三区 久久精品| 欧美日韩国产高清一区二区| 日韩午夜激情av| 国产精品欧美极品| 亚洲高清免费视频| 精品一区免费av| 99免费精品在线观看| 777午夜精品免费视频| 精品国免费一区二区三区| 中文无字幕一区二区三区| 亚洲精选视频在线| 美女视频免费一区| 成人av手机在线观看| 精品视频资源站| 精品福利一二区| 国产精品久久久久久久久免费相片 | 欧美一区二区啪啪| 国产欧美日韩精品在线| 亚洲主播在线播放| 国产精品1区二区.| 欧美日韩视频不卡| 国产亚洲欧美激情| 午夜亚洲福利老司机| 国产精品一区二区你懂的| 在线视频亚洲一区| 国产亚洲视频系列| 午夜视频一区二区| 高清成人免费视频| 欧美一区二区三区免费在线看| 中文字幕免费不卡| 日本中文一区二区三区| eeuss国产一区二区三区| 日韩视频在线一区二区| 亚洲视频一区二区免费在线观看| 蜜臀精品久久久久久蜜臀| 色哟哟日韩精品| 久久久777精品电影网影网| 婷婷中文字幕综合| 99re这里都是精品| 国产日产精品1区| 另类小说综合欧美亚洲| 欧美系列在线观看| 亚洲人快播电影网| 国产91丝袜在线播放0| 欧美xxxxxxxx| 男女激情视频一区| 欧美日韩国产小视频| 夜色激情一区二区| 91丨九色porny丨蝌蚪| 国产无人区一区二区三区| 久久国产精品露脸对白| 欧美精品tushy高清| 一区二区三区高清在线| 99久久国产综合精品女不卡| 久久精品网站免费观看| 国产久卡久卡久卡久卡视频精品| 精品国产免费视频| 麻豆成人久久精品二区三区红| 欧美精品在欧美一区二区少妇| 樱花影视一区二区| 一本一道综合狠狠老| 亚洲视频中文字幕| 不卡视频免费播放| 亚洲国产高清aⅴ视频| 国产黄人亚洲片| 久久久精品tv| 福利一区在线观看| 国产目拍亚洲精品99久久精品| 国产福利视频一区二区三区| 久久久91精品国产一区二区三区| 国产精品一色哟哟哟| 久久精品亚洲麻豆av一区二区| 国产精品白丝jk白祙喷水网站| 久久人人超碰精品| 成人在线视频首页| 亚洲蜜臀av乱码久久精品蜜桃| 99精品视频免费在线观看| 日韩理论片网站| 欧美私人免费视频| 日本最新不卡在线| 精品捆绑美女sm三区| 国产精品综合二区| 亚洲四区在线观看| 欧美无砖砖区免费| 美女性感视频久久| 久久久噜噜噜久久人人看 | 亚洲精选在线视频| 欧美日韩国产色站一区二区三区| 日本麻豆一区二区三区视频| 精品国产乱码久久久久久浪潮| 国产98色在线|日韩| 伊人一区二区三区| 6080午夜不卡| 国产成人av影院| 亚洲精选视频免费看| 日韩精品中文字幕在线不卡尤物| 国产高清在线精品| 一区二区三区在线观看网站| 日韩三级在线观看| 成人免费看的视频|