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

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

?? taste.atg

?? 一個Pascal語言分析器
?? ATG
字號:
COMPILER Taste

USES TL, TC;

TYPE
  TName = STRING;

PROCEDURE StringToVal (s: STRING; VAR v: INTEGER);
  VAR
    error: INTEGER;
  BEGIN
    val(s, v, error);
  END;

(*--------------------------------------------------------------------------*)

CHARACTERS
  letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".
  digit = "0123456789".
  cr = CHR(13).
  lf = CHR(10).
  tab = CHR(9).

TOKENS
  ident  = letter {letter | digit}.
  number = digit {digit}.

IGNORE cr + lf + tab

COMMENTS FROM "(*" TO "*)" NESTED

PRODUCTIONS
  Taste                                  (. VAR
                                              name, progName: TName;
                                              obj: TL.TObject; .)
  = "PROGRAM" Ident<progName> ";"        (. TC.progStart := TC.pc .)
    Body
    Ident<name>                          (. IF name <> progName THEN SemError(119);
                                            TC.Emit(TC.HALTc) .)
    "." .

  Body                                   (. VAR
                                              fix, typ: INTEGER;
                                              name, name1: TName;
                                              obj: TL.TObject; .)
  =                                      (. TL.EnterScope;
                                            fix := TC.pc + 1; TC.Emit2(TC.JMP, 0) .)
    { "VAR"
      { Ident<name> ":"                  (. obj := TL.NewObj(name, TL.vars) .)
        TypeId<obj^.typ> ";"
      }

    | "PROCEDURE" Ident<name> ";"        (. obj := TL.NewObj(name, TL.procs);
                                            obj^.adr := TC.pc .)
      Body
      Ident<name1>                       (. TC.Emit(TC.RET);
                                            IF name <> name1 THEN SemError(119); .)
      ";"
    }
    "BEGIN"                              (. TC.Fixup(fix); TC.Emit2(TC.RES, TL.DataSpace) .)
    StatSeq
    "END"                                (. TL.LeaveScope .).

  TypeId<VAR typ: INTEGER>
  =                                      (. typ := undef .)
  (   "INTEGER"                          (. typ := TL.int .)
    | "BOOLEAN"                          (. typ := TL.bool .)
  ) .

  Ident<VAR name: TName>
  = ident                                (. LexName(name) .).

  StatSeq = Stat {";" Stat}.

  Stat                                   (. VAR
                                              typ: INTEGER;
                                              name: TName;
                                              obj: TL.TObject;
                                              fix, fix2, loopstart: INTEGER; .)
  = [ Ident<name>                        (. obj := TL.Obj(name) .)
      ( ":" "="                          (. IF obj^.kind <> TL.vars THEN SemError(123); .)
        Expression<typ>                  (. IF typ <> obj^.typ THEN SemError(121);
                                            TC.Emit3(TC.STO, TL.curLevel-obj^.level, obj^.adr); .)
      |                                  (. IF obj^.kind <> TL.procs THEN SemError(124);
                                            TC.Emit3(TC.CALL, TL.curLevel-obj^.level, obj^.adr); .)
      )
    | "IF" Expression<typ>               (. IF typ <> TL.bool THEN SemError(122);
                                            fix := TC.pc + 1; TC.Emit2(TC.FJMP, 0) .)
      "THEN" StatSeq
      [ "ELSE"                           (. fix2 := TC.pc + 1; TC.Emit2(TC.JMP, 0);
                                            TC.Fixup(fix); fix := fix2 .)
        StatSeq
      ]
      "END"                              (. TC.Fixup(fix) .)
    | "WHILE"                            (. loopstart := TC.pc .)
      Expression<typ>                    (. IF typ <> TL.bool THEN SemError(122);
                                            fix := TC.pc + 1; TC.Emit2(TC.FJMP, 0) .)
      "DO" StatSeq                       (. TC.Emit2(TC.JMP, loopstart); TC.Fixup(fix) .)
      "END"
    | "READ" Ident<name>                 (. obj := TL.Obj(name);
                                            IF obj^.typ <> TL.int THEN SemError(120);
                                            TC.Emit3(TC.READc, TL.curLevel-obj^.level, obj^.adr) .)
    | "WRITE" Expression<typ>           (. IF typ <> TL.int THEN SemError(120);
                                            TC.Emit(TC.WRITEc) .)
    ].

  Expression<VAR typ: INTEGER>           (. VAR
                                              type1, op: INTEGER; .)
  = SimExpr<typ>
    [ RelOp<op> SimExpr<type1>           (. IF (typ <> type1) THEN SemError(121);
                                            TC.Emit(op); typ := TL.bool .)
      ].

  SimExpr<VAR typ: INTEGER>              (. VAR
                                              type1, op: INTEGER; .)
  = Term<typ>
    { AddOp<op> Term<type1>              (. IF (typ <> TL.int) OR (type1 <> TL.int) THEN SemError(120);
                                            TC.Emit(op) .)
      }.

  Term<VAR typ: INTEGER>                 (. VAR
                                              type1, op: INTEGER; .)
  = Factor<typ>
    { MulOp<op> Factor<type1>            (. IF (typ <> TL.int) OR (type1 <> TL.int) THEN SemError(120);
                                            TC.Emit(op) .)
    }.

  Factor<VAR typ: INTEGER>               (. VAR
                                              val, n: INTEGER;
                                              obj: TL.TObject;
                                              name: TName; .)
  = ( Ident<name>                        (. obj := TL.Obj(name); typ := obj^.typ;
                                            IF obj^.kind = TL.vars THEN
                                              TC.Emit3(TC.LOAD, TL.curLevel-obj^.level, obj^.adr)
                                            ELSE SemError(123); .)
    | "TRUE"                             (. TC.Emit2(TC.LIT, 1); typ := TL.bool .)
    | "FALSE"                            (. TC.Emit2(TC.LIT, 0); typ := TL.bool .)
    | number                             (. LexString(name); StringToVal(name, n);
                                            TC.Emit2(TC.LIT, n); typ := TL.int .)
    | "-" Factor<typ>                    (. IF typ <> TL.int THEN BEGIN SemError(120); typ := TL.int END;
                                            TC.Emit(TC.NEG) .)
    ).

  MulOp<VAR op: INTEGER>
  =                                      (. op := -1 .)
    ( "*"                                (. op := TC.MUL .)
    | "/"                                (. op := TC.DIVI .)
    ).

  AddOp<VAR op: INTEGER>
  =                                      (. op := -1 .)
    ( "+"                                (. op := TC.ADD .)
    | "-"                                (. op := TC.SUB .)
    ).

  RelOp<VAR op: INTEGER>
  =                                      (. op := -1 .)
    ( "="                                (. op := TC.EQUc .)
    | "<"                                (. op := TC.LSSc .)
    | ">"                                (. op := TC.GTRc .)
    ).

END Taste.

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 青青草国产精品亚洲专区无| 日韩精品免费专区| 99精品国产热久久91蜜凸| 91精品免费在线| 自拍偷拍亚洲综合| 国产成人高清在线| 日韩写真欧美这视频| 亚洲综合视频在线| 99久久国产免费看| 久久精品男人天堂av| 偷拍日韩校园综合在线| 99精品久久只有精品| 欧美激情一区二区| 大胆亚洲人体视频| 欧美激情在线观看视频免费| 欧美性大战久久| 亚洲欧美国产高清| 91香蕉视频mp4| 国产精品视频看| 成人免费视频一区二区| 久久久久国产精品人| 国产一区二区三区在线观看免费视频| 欧美日韩成人综合天天影院| 亚洲高清三级视频| 欧美色大人视频| 亚洲一区免费观看| 欧洲另类一二三四区| 一区二区三区在线影院| 91视频在线观看免费| 亚洲免费成人av| 欧美少妇一区二区| 日日骚欧美日韩| 欧美大片拔萝卜| 精品一区二区三区欧美| 久久综合久色欧美综合狠狠| 蜜臀精品久久久久久蜜臀| 日韩精品中文字幕在线一区| 手机精品视频在线观看| 欧美mv和日韩mv的网站| 国产综合久久久久久鬼色| 国产拍揄自揄精品视频麻豆| 成人av电影在线网| 亚洲美女屁股眼交| 欧美在线制服丝袜| 午夜精品久久久久久久99樱桃| 91 com成人网| 狠狠色狠狠色综合日日91app| 精品99999| 成人av动漫网站| 亚洲自拍偷拍综合| 日韩欧美色电影| 成人免费高清视频在线观看| 亚洲免费资源在线播放| 欧美日韩精品一区二区三区四区| 丝袜亚洲另类欧美综合| 26uuu国产日韩综合| 成人午夜精品在线| 亚洲国产精品欧美一二99| 日韩欧美一级在线播放| 成a人片国产精品| 亚洲国产日韩av| 亚洲精品一区二区三区四区高清 | 欧美在线一二三四区| 亚洲主播在线观看| 欧美精品一区二区三区在线播放| 国产乱码精品一区二区三区av | 久久精品人人做| 色综合久久九月婷婷色综合| 免费av网站大全久久| 国产精品三级视频| 欧美一区二区精美| 99热这里都是精品| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产偷国产偷精品高清尤物| 欧美性大战久久| 成人美女视频在线观看| 免费不卡在线观看| 尤物视频一区二区| 日本一区二区三区免费乱视频| 色国产精品一区在线观看| 国产一区二区三区久久悠悠色av| 成人国产精品免费网站| 性做久久久久久免费观看| 国产精品久久久久久户外露出| 欧美一区二区三区成人| 在线亚洲高清视频| 成人av网站免费观看| 国产一区二区在线视频| 日韩精品五月天| 亚洲精品乱码久久久久久日本蜜臀 | 欧美色视频在线观看| 成人午夜激情片| 久久99热这里只有精品| 亚洲综合丝袜美腿| 亚洲图片激情小说| 国产精品卡一卡二| 国产午夜精品久久久久久免费视| 日韩欧美中文字幕制服| 欧美视频一区二区三区| 在线免费观看日本一区| 91麻豆国产香蕉久久精品| 成人影视亚洲图片在线| 国产黄色91视频| 国产精品18久久久久久vr| 久久99久久久久| 毛片基地黄久久久久久天堂| 成人国产一区二区三区精品| 国内精品视频666| 久久精品二区亚洲w码| 日韩国产在线一| 亚洲国产日韩a在线播放性色| 中文字幕一区二区三区不卡 | 亚洲日本va在线观看| 亚洲国产精华液网站w| 欧美国产日韩在线观看| 国产三级欧美三级| 国产欧美一区二区在线| 欧美激情一区二区三区| 亚洲欧洲性图库| 亚洲美女免费在线| 午夜伦欧美伦电影理论片| 免费高清在线视频一区·| 国内精品国产成人国产三级粉色 | xnxx国产精品| 亚洲国产精品激情在线观看| 国产精品美女久久久久久久久| 国产精品国产三级国产三级人妇| 国产精品亲子乱子伦xxxx裸| 国产精品的网站| 亚洲一区在线播放| 蜜桃精品在线观看| 国产在线播放一区| av一区二区三区四区| 91伊人久久大香线蕉| 欧美日韩三级一区二区| 欧美电影免费观看高清完整版| 26uuu国产电影一区二区| 亚洲视频免费看| 日韩精品一二三四| 成人av综合一区| 欧美久久高跟鞋激| 久久久久久久久久久久久久久99 | 欧美视频第二页| 91精品国产色综合久久ai换脸| 精品国产一区a| 日韩美女视频19| 免费在线一区观看| 成人在线视频一区| 91精品国产色综合久久不卡电影 | 午夜电影网亚洲视频| 久久精品国产精品青草| aaa亚洲精品| 欧美一级在线视频| 亚洲欧美偷拍卡通变态| 韩国视频一区二区| 欧美日韩综合在线| 国产午夜三级一区二区三| 夜夜嗨av一区二区三区四季av| 久久99热这里只有精品| 在线精品亚洲一区二区不卡| 久久视频一区二区| 亚洲成av人**亚洲成av**| 国产白丝网站精品污在线入口| 欧美图区在线视频| 国产精品剧情在线亚洲| 精品亚洲porn| 欧美日韩美少妇| 亚洲免费观看视频| 成人中文字幕合集| 欧美va亚洲va香蕉在线| 一区二区三区精品视频| 丁香啪啪综合成人亚洲小说 | 精品一区二区久久久| 在线精品视频一区二区三四| 亚洲国产高清aⅴ视频| 蜜桃在线一区二区三区| 欧美日韩午夜影院| 亚洲欧美激情一区二区| av一区二区三区在线| 久久精品一区二区三区av| 蜜桃视频免费观看一区| 91精品蜜臀在线一区尤物| 亚洲成av人影院在线观看网| 色综合夜色一区| 成人欧美一区二区三区黑人麻豆| 国产激情视频一区二区三区欧美| 精品久久99ma| 久久精品国产99久久6| 日韩一二三区视频| 青青草国产精品亚洲专区无| 欧美精品99久久久**| 性做久久久久久免费观看| 欧美日韩国产成人在线91| 亚洲一区二区三区中文字幕| 欧亚洲嫩模精品一区三区| 亚洲卡通欧美制服中文| 欧日韩精品视频| 天堂av在线一区| 欧美一级电影网站|