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

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

?? cr.atg

?? 一個Pascal語言分析器
?? ATG
?? 第 1 頁 / 共 2 頁
字號:
$LSC (*ACFGILMOSX*)
(* COCO/R for MS-DOS grammar used to generate COCO/R itself
   as adapted by P.D. Terry, January 1992
   version 1.48p last modified Tue  11-17-98

   This is the special version for the TurboPascal compiler/compiler *)

COMPILER CR
USES CRTable, CRA, Sets;

CONST
  ident = 0; stringSym = 1;  (* symbol kind *)

PROCEDURE FixString (VAR name: STRING; len: INTEGER);
  VAR
    double, spaces: BOOLEAN;
    i: INTEGER;
  BEGIN
    IF len = 2 THEN BEGIN SemError(129); EXIT END;
    IF CRTable.ignoreCase THEN (* force uppercase *)
      FOR i := 2 TO len - 1 DO name[i] := UpCase(name[i]);
    double := FALSE; spaces := FALSE;
    FOR i := 2 TO len - 1 DO (* search for interior " or spaces *) BEGIN
      IF name[i] = '"' THEN double := TRUE;
      IF name[i] <= ' ' THEN spaces := TRUE;
    END;
    IF NOT double THEN (* force delimiters to be " quotes *) BEGIN
      name[1] := '"'; name[len] := '"'
    END;
    IF spaces THEN SemError(124);
  END;

PROCEDURE MatchLiteral (sp: INTEGER);
(* store string either as token or as literal *)
  VAR
    sn, sn1:  CRTable.SymbolNode;
    matchedSp: INTEGER;
  BEGIN
    CRTable.GetSym(sp, sn);
    CRA.MatchDFA(sn.name, sp, matchedSp);
    IF matchedSp <> CRTable.noSym
      THEN
        BEGIN
          CRTable.GetSym(matchedSp, sn1);
          sn1.struct := CRTable.classLitToken;
          CRTable.PutSym(matchedSp, sn1);
          sn.struct := CRTable.litToken
        END
      ELSE sn.struct := CRTable.classToken;
    CRTable.PutSym(sp, sn)
  END;

PROCEDURE SetCtx (gp: INTEGER);
(* set transition code to CRTable.contextTrans *)
  VAR
    gn: CRTable.GraphNode;
  BEGIN
    WHILE gp > 0 DO BEGIN
      CRTable.GetNode(gp, gn);
      IF (gn.typ = CRTable.chart) OR (gn.typ = CRTable.class)
        THEN BEGIN gn.p2 := CRTable.contextTrans; CRTable.PutNode(gp, gn) END
        ELSE IF (gn.typ = CRTable.opt) OR (gn.typ = CRTable.iter) THEN SetCtx(gn.p1)
        ELSE IF gn.typ = CRTable.alt THEN BEGIN SetCtx(gn.p1); SetCtx(gn.p2) END;
      gp := gn.next
    END
  END;

PROCEDURE SetOption (s: STRING);
  VAR
    i: INTEGER;
  BEGIN
    FOR i := 1 TO Length(s) DO
      BEGIN
        s[i] := UpCase(s[i]);
        IF s[i] IN ['A' .. 'Z'] THEN CRTable.ddt[s[i]] := TRUE;
      END;
  END;

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

CHARACTERS

  letter   = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_".
  digit    = "0123456789".
  ctrl     = CHR(1) .. CHR(31).
  tab      = CHR(9).
  eol      = CHR(13).
  lf       = CHR(10).
  noQuote1 = ANY - '"' - ctrl.
  noQuote2 = ANY - "'" - ctrl.

IGNORE tab + eol + lf

TOKENS

  ident     = letter {letter | digit}.
  string    = '"' {noQuote1} '"' | "'" {noQuote2} "'".
  badstring = '"' {noQuote1} (eol | lf) | "'" {noQuote2} (eol | lf).
  number    = digit {digit}.

PRAGMAS

  Options = "$" {letter | digit} .
                (.CRS.GetName(CRS.nextPos, CRS.nextLen, s); SetOption(s);  .)

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

PRODUCTIONS

CR                             (. VAR
                                    ok, undef, hasAttrs: BOOLEAN;
                                    unknownSy,
                                    eofSy, gR:       INTEGER;
                                    gramLine, sp:    INTEGER;
                                    name, gramName:  CRTable.Name;
                                    sn:              CRTable.SymbolNode; .)
=
"COMPILER"
                               (. gramLine := CRS.line;
                                  eofSy := CRTable.NewSym(CRTable.t, 'EOF', 0);
                                  CRTable.genScanner := TRUE; CRTable.ignoreCase := FALSE;
                                  Sets.Clear(CRTable.ignored) .)
Ident <gramName>
[ "USES"                       (. CRTable.useDeclPos.beg := CRS.nextPos;
                                  CRTable.hasUses := TRUE .)
  ident { "," ident }          (. CRTable.useDeclPos.len := CRS.nextPos - CRTable.useDeclPos.beg;
                                  CRTable.useDeclPos.col := 0 .)
  ";" ]                        (. CRTable.semDeclPos.beg := CRS.nextPos .)
{ ANY }                        (. CRTable.semDeclPos.len := CRS.nextPos - CRTable.semDeclPos.beg;
                                  CRTable.semDeclPos.col := 0 .)
{ Declaration }
SYNC
"PRODUCTIONS"                  (. ok := Successful;
                                  IF ok AND CRTable.genScanner THEN CRA.MakeDeterministic(ok);
                                  IF NOT ok THEN SemError(127);
                                  CRTable.nNodes := 0 .)
{ Ident <name>                 (. sp := CRTable.FindSym(name); undef := sp = CRTable.noSym;
                                  IF undef
                                    THEN BEGIN
                                        sp := CRTable.NewSym(CRTable.nt, name, CRS.line);
                                        CRTable.GetSym(sp, sn)
                                      END
                                    ELSE BEGIN
                                      CRTable.GetSym(sp, sn);
                                      IF sn.typ = CRTable.nt
                                        THEN
                                          BEGIN IF sn.struct > 0 THEN SemError(107) END
                                        ELSE SemError(108);
                                      sn.line := CRS.line
                                    END;
                                  hasAttrs := sn.attrPos.beg >= 0 .)
  ( Attribs <sn.attrPos>       (. IF NOT undef AND NOT hasAttrs THEN SemError(105);
                                  CRTable.PutSym(sp, sn) .)
  |                            (. IF NOT undef AND hasAttrs THEN SemError(105) .)
  )
  [ SemText <sn.semPos>]
  WEAK "="
  Expression <sn.struct, gR>   (. CRTable.CompleteGraph(gR); CRTable.PutSym(sp, sn) .)
  WEAK "."
  }
  "END" Ident <name>           (. sp := CRTable.FindSym(gramName);
                                  IF sp = CRTable.noSym THEN SemError(111)
                                  ELSE BEGIN
                                    CRTable.GetSym(sp, sn);
                                    IF sn.attrPos.beg >= 0 THEN SemError(112);
                                    CRTable.root := CRTable.NewNode(CRTable.nt, sp, gramLine);
                                  END;
                                  IF name <> gramName THEN SemError(117)  .)
"."                            (. unknownSy := CRTable.NewSym(CRTable.t, 'not', 0) .)

.

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

Declaration                    (. VAR
                                    gL1, gR1, gL2, gR2: INTEGER;
                                    nested:             BOOLEAN; .)
= "CHARACTERS" { SetDecl }
| "TOKENS"     { TokenDecl <CRTable.t> }
| "NAMES"      { NameDecl }
| "PRAGMAS"    { TokenDecl <CRTable.pr> }
| "COMMENTS"
  "FROM" TokenExpr <gL1, gR1>
  "TO" TokenExpr <gL2, gR2>
  ( "NESTED"                   (. nested := TRUE .)
    |                          (. nested := FALSE .)
  )
                               (. CRA.NewComment(gL1, gL2, nested) .)
| "IGNORE"
  ( "CASE"                     (. CRTable.ignoreCase := TRUE .)
  | Set <CRTable.ignored>      (. IF Sets.IsIn(CRTable.ignored, 0) THEN SemError(119) .)
  )
.


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

SetDecl                        (. VAR
                                    c:    INTEGER;
                                    oneSet:  CRTable.CRTSet;
                                    name: CRTable.Name; .)
= Ident <name>                 (. c := CRTable.ClassWithName(name);
                                  IF c >= 0 THEN SemError(107) .)
  "=" Set <oneSet>                 (.c := CRTable.NewClass(name, oneSet) .)
  ".".

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

Set <VAR oneSet: CRTable.CRTSet>
                               (. VAR
                                    set2: CRTable.CRTSet; .)
= SimSet <oneSet>
  { "+" SimSet <set2>          (. Sets.Unite(oneSet, set2) .)
  | "-" SimSet <set2>          (. Sets.Differ(oneSet, set2) .)
  }.

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

SimSet <VAR oneSet: CRTable.CRTSet>
                               (. VAR
                                    i, n1, n2: INTEGER;
                                    c:         INTEGER;
                                    name:      CRTable.Name;
                                    s:         STRING; .)
= Ident <name>                 (. c := CRTable.ClassWithName(name);
                                  IF c < 0
                                    THEN BEGIN SemError(115); Sets.Clear(oneSet) END
                                    ELSE CRTable.GetClass(c, oneSet)  .)
| string                       (. CRS.GetName(CRS.pos, CRS.len, s);
                                  Sets.Clear(oneSet); i := 2;
                                  WHILE s[i] <> s[1] DO BEGIN
                                    IF CRTable.ignoreCase THEN s[i] := UpCase(s[i]);
                                    Sets.Incl(oneSet, ORD(s[i])); INC(i)
                                  END .)
| SingleChar <n1>
                               (. Sets.Clear(oneSet); Sets.Incl(oneSet, n1) .)

  [ ".." SingleChar <n2>       (. FOR i := n1 TO n2 DO Sets.Incl(oneSet, i) .)
                          ]

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产日产精品一区| 亚洲精品第一国产综合野| 色悠久久久久综合欧美99| 男女激情视频一区| 亚洲精品国久久99热| 精品福利视频一区二区三区| 欧美系列一区二区| 成人开心网精品视频| 裸体一区二区三区| 亚洲成人av一区二区三区| 国产精品美女一区二区在线观看| 欧美成人精品1314www| 在线观看一区二区视频| youjizz久久| 国产真实乱子伦精品视频| 日本不卡视频一二三区| 亚洲国产日韩一级| 国产精品久久久99| 国产午夜精品一区二区三区四区| 日韩欧美一级二级三级久久久| 欧美日韩精品一二三区| 99久久精品国产观看| 岛国精品在线播放| 国产精品 欧美精品| 国产伦精品一区二区三区视频青涩| 日本在线不卡视频| 五月天激情综合网| 午夜精品视频一区| 舔着乳尖日韩一区| 亚洲va欧美va人人爽午夜| 亚洲男女一区二区三区| 亚洲女人小视频在线观看| 综合欧美亚洲日本| 亚洲视频一二三区| 亚洲色图丝袜美腿| 一区二区三区在线观看网站| 亚洲欧美二区三区| 亚洲激情五月婷婷| 亚洲一区二区美女| 天堂精品中文字幕在线| 亚洲成a人片综合在线| 亚洲 欧美综合在线网络| 天天综合日日夜夜精品| 青椒成人免费视频| 国内外成人在线| 国产精品1区二区.| 丁香婷婷综合激情五月色| 国产成人精品免费网站| 成人免费三级在线| 91麻豆自制传媒国产之光| 色综合天天综合网国产成人综合天| 91麻豆123| 欧美丝袜第三区| 91精品欧美综合在线观看最新| 91精品欧美一区二区三区综合在| 日韩免费观看2025年上映的电影 | 欧美另类变人与禽xxxxx| 欧美欧美欧美欧美首页| 日韩视频在线你懂得| 久久久久久久久久看片| 一区视频在线播放| 亚洲va韩国va欧美va| 久草精品在线观看| 成人性生交大片免费看在线播放 | av一区二区久久| 色婷婷av一区二区三区软件 | 中文字幕欧美一| 亚洲国产精品尤物yw在线观看| 日韩国产成人精品| 粉嫩av一区二区三区粉嫩| 色88888久久久久久影院按摩 | 国产成人免费在线| 91色视频在线| 精品美女一区二区| 一区免费观看视频| 全部av―极品视觉盛宴亚洲| 国产aⅴ综合色| 欧美三级韩国三级日本三斤| 精品国偷自产国产一区| 亚洲色图20p| 久久99精品久久久久久久久久久久| 成人午夜激情在线| 欧美一区二区视频在线观看2020 | 欧美激情在线免费观看| 亚洲一区二区三区在线看| 国产一区二区三区在线观看精品| 99精品1区2区| 欧美精品一区二区精品网| 亚洲美女精品一区| 国产精品综合av一区二区国产馆| 国产欧美一区二区精品久导航| 一区二区三区不卡视频在线观看| 精品综合久久久久久8888| 欧洲亚洲国产日韩| 欧美国产精品专区| 久久成人麻豆午夜电影| 色香蕉成人二区免费| 国产无一区二区| 免费看欧美女人艹b| 欧美专区在线观看一区| 中文字幕欧美日韩一区| 91精品国产入口在线| 亚洲欧美激情一区二区| 高清久久久久久| 日韩免费视频一区| 午夜精品123| 欧美亚洲国产一区二区三区va| 欧美激情中文字幕一区二区| 捆绑变态av一区二区三区| 欧美日高清视频| 亚洲欧美另类图片小说| 成人黄色电影在线 | 色综合亚洲欧洲| 国产精品网站在线播放| 国产在线精品国自产拍免费| 51精品久久久久久久蜜臀| 一区二区三区高清| 色狠狠一区二区三区香蕉| 国产精品久久久久久一区二区三区 | 中文一区一区三区高中清不卡| 蜜臀国产一区二区三区在线播放| 精品视频资源站| 亚洲香蕉伊在人在线观| 91影院在线免费观看| 中文字幕一区二区日韩精品绯色| 国产成人综合在线观看| 久久久久久久久久看片| 国产精品99久久久久久宅男| 欧美mv日韩mv国产网站| 久草中文综合在线| 欧美一区二区三区四区五区| 天天色天天爱天天射综合| 欧美日韩国产电影| 日韩中文字幕av电影| 7777精品伊人久久久大香线蕉完整版 | 国产成人精品www牛牛影视| 国产亚洲精久久久久久| 国产精品影视在线观看| 久久午夜色播影院免费高清 | 欧美日韩国产另类不卡| 亚洲国产日韩综合久久精品| 欧美性一级生活| 日韩成人av影视| 日韩欧美一级二级三级久久久| 精品一二线国产| 亚洲国产激情av| 91免费国产视频网站| 亚洲国产欧美在线| 欧美一二三区精品| 极品销魂美女一区二区三区| 久久伊人蜜桃av一区二区| 成人午夜视频在线观看| 成人免费在线播放视频| 欧美日韩综合一区| 蜜桃av一区二区三区| 久久久久久久久久电影| 欧美精彩视频一区二区三区| 国产69精品久久久久毛片 | 亚洲国产一二三| 日韩三级视频在线看| 国产成人在线视频网址| 国产精品乱码妇女bbbb| 欧美视频一区二区三区四区| 奇米影视一区二区三区小说| 久久久久9999亚洲精品| 色哟哟一区二区在线观看| 日韩精品国产精品| 国产日韩av一区二区| 色88888久久久久久影院按摩 | 99精品热视频| 婷婷丁香激情综合| 国产午夜精品美女毛片视频| 日本韩国欧美三级| 精品一区二区三区久久久| 亚洲人成精品久久久久| 日韩一区二区三区四区五区六区| 成人爽a毛片一区二区免费| 亚洲一区二区三区在线播放 | 亚洲主播在线播放| 精品国产乱码久久久久久影片| 北条麻妃一区二区三区| 日韩成人免费在线| 亚洲视频一二三区| 日韩精品一区二区三区视频 | 久久99精品久久久久久久久久久久| 久久精品综合网| 欧美人体做爰大胆视频| 不卡视频在线看| 美腿丝袜亚洲色图| 亚洲黄一区二区三区| 久久久久久久久久久久久久久99| 91成人在线精品| 成人午夜电影小说| 毛片av一区二区| 亚洲一卡二卡三卡四卡五卡| 久久综合九色综合欧美就去吻| 欧美视频一区二区三区| av一区二区三区| 国产成人午夜99999| 久草在线在线精品观看|