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

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

?? crp.pas

?? 一個Pascal語言分析器
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
UNIT CRP;
(* Parser generated by Coco/R (Pascal version) *)

INTERFACE

PROCEDURE Parse;

FUNCTION Successful : BOOLEAN;
(* Returns TRUE if no errors have been recorded while parsing *)

PROCEDURE SynError (errNo: INTEGER);
(* Report syntax error with specified errNo *)

PROCEDURE SemError (errNo: INTEGER);
(* Report semantic error with specified errNo *)

PROCEDURE LexString (VAR Lex : STRING);
(* Retrieves Lex as exact spelling of current token *)

PROCEDURE LexName (VAR Lex : STRING);
(* Retrieves Lex as name of current token (capitalized if IGNORE CASE) *)

PROCEDURE LookAheadString (VAR Lex : STRING);
(* Retrieves Lex as exact spelling of lookahead token *)

PROCEDURE LookAheadName (VAR Lex : STRING);
(* Retrieves Lex as name of lookahead token (capitalized if IGNORE CASE) *)

IMPLEMENTATION

USES CRTable, CRA, Sets, CRS;


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;

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



CONST
  maxT = 44;
  maxP = 45;
  minErrDist  =  2;  (* minimal distance (good tokens) between two errors *)
  setsize     = 16;  (* sets are stored in 16 bits *)

TYPE
  BITSET = SET OF 0 .. 15;
  SymbolSet = ARRAY [0 .. maxT DIV setsize] OF BITSET;

VAR
  symSet:  ARRAY [0 ..  18] OF SymbolSet; (*symSet[0] = allSyncSyms*)
  errDist: INTEGER;   (* number of symbols recognized since last error *)
  sym:     INTEGER;   (* current input symbol *)

PROCEDURE  SemError (errNo: INTEGER);
  BEGIN
    IF errDist >= minErrDist THEN BEGIN
      CRS.Error(errNo, CRS.line, CRS.col, CRS.pos);
    END;
    errDist := 0;
  END;

PROCEDURE  SynError (errNo: INTEGER);
  BEGIN
    IF errDist >= minErrDist THEN BEGIN
      CRS.Error(errNo, CRS.nextLine, CRS.nextCol, CRS.nextPos);
    END;
    errDist := 0;
  END;

PROCEDURE  Get;
  VAR
    s: STRING;
  BEGIN
    REPEAT
      CRS.Get(sym);
      IF sym <= maxT THEN
        INC(errDist)
      ELSE BEGIN
        CASE sym OF
          45: BEGIN CRS.GetName(CRS.nextPos, CRS.nextLen, s); SetOption(s); END;
        END;
        CRS.nextPos := CRS.pos;
        CRS.nextCol := CRS.col;
        CRS.nextLine := CRS.line;
        CRS.nextLen := CRS.len;
      END;
    UNTIL sym <= maxT
  END;

FUNCTION  _In (VAR s: SymbolSet; x: INTEGER): BOOLEAN;
  BEGIN
    _In := x MOD setsize IN s[x DIV setsize];
  END;

PROCEDURE  Expect (n: INTEGER);
  BEGIN
    IF sym = n THEN Get ELSE SynError(n);
  END;

PROCEDURE  ExpectWeak (n, follow: INTEGER);
  BEGIN
    IF sym = n
    THEN Get
    ELSE BEGIN
      SynError(n); WHILE NOT _In(symSet[follow], sym) DO Get;
    END
  END;

FUNCTION  WeakSeparator (n, syFol, repFol: INTEGER): BOOLEAN;
  VAR
    s: SymbolSet;
    i: INTEGER;
  BEGIN
    IF sym = n
    THEN BEGIN Get; WeakSeparator := TRUE; EXIT; END
    ELSE IF _In(symSet[repFol], sym) THEN BEGIN WeakSeparator := FALSE; exit END
    ELSE BEGIN
      i := 0;
      WHILE i <= maxT DIV setsize DO BEGIN
        s[i] := symSet[0, i] + symSet[syFol, i] + symSet[repFol, i]; INC(i)
      END;
      SynError(n); WHILE NOT _In(s, sym) DO Get;
      WeakSeparator := _In(symSet[syFol], sym)
    END
  END;

PROCEDURE LexName (VAR Lex : STRING);
  BEGIN
    CRS.GetName(CRS.pos, CRS.len, Lex)
  END;

PROCEDURE LexString (VAR Lex : STRING);
  BEGIN
    CRS.GetString(CRS.pos, CRS.len, Lex)
  END;

PROCEDURE LookAheadName (VAR Lex : STRING);
  BEGIN
    CRS.GetName(CRS.nextPos, CRS.nextLen, Lex)
  END;

PROCEDURE LookAheadString (VAR Lex : STRING);
  BEGIN
    CRS.GetString(CRS.nextPos, CRS.nextLen, Lex)
  END;

FUNCTION Successful : BOOLEAN;
  BEGIN
    Successful := CRS.errors = 0
  END;

PROCEDURE _TokenFactor (VAR gL, gR: INTEGER); FORWARD;
PROCEDURE _TokenTerm (VAR gL, gR: INTEGER); FORWARD;
PROCEDURE _Factor (VAR gL, gR: INTEGER); FORWARD;
PROCEDURE _Term (VAR gL, gR: INTEGER); FORWARD;
PROCEDURE _Symbol (VAR name: CRTable.Name; VAR kind: INTEGER); FORWARD;
PROCEDURE _SingleChar (VAR n: INTEGER); FORWARD;
PROCEDURE _SimSet (VAR oneSet: CRTable.CRTSet); FORWARD;
PROCEDURE _Set (VAR oneSet: CRTable.CRTSet); FORWARD;
PROCEDURE _TokenExpr (VAR gL, gR: INTEGER); FORWARD;
PROCEDURE _NameDecl; FORWARD;
PROCEDURE _TokenDecl (typ: INTEGER); FORWARD;
PROCEDURE _SetDecl; FORWARD;
PROCEDURE _Expression (VAR gL, gR: INTEGER); FORWARD;
PROCEDURE _SemText (VAR semPos: CRTable.Position); FORWARD;
PROCEDURE _Attribs (VAR attrPos: CRTable.Position); FORWARD;
PROCEDURE _Declaration; FORWARD;
PROCEDURE _Ident (VAR name: CRTable.Name); FORWARD;
PROCEDURE _CR; FORWARD;

PROCEDURE _TokenFactor (VAR gL, gR: INTEGER);
  VAR
    kind, c: INTEGER;
    oneSet:  CRTable.CRTSet;
    name:    CRTable.Name;
  BEGIN
    gL :=0; gR := 0;
    IF (sym = 1) OR (sym = 2) THEN BEGIN
      _Symbol(name, kind);
      IF kind = ident
        THEN
          BEGIN
            c := CRTable.ClassWithName(name);
            IF c < 0 THEN BEGIN
              SemError(115);
              Sets.Clear(oneSet); c := CRTable.NewClass(name, oneSet)
            END;
            gL := CRTable.NewNode(CRTable.class, c, 0); gR := gL
          END
        ELSE (* string *)
          CRTable.StrToGraph(name, gL, gR);
    END ELSE IF (sym = 28) THEN BEGIN
      Get;
      _TokenExpr(gL, gR);
      Expect(29);
    END ELSE IF (sym = 32) THEN BEGIN
      Get;
      _TokenExpr(gL, gR);
      Expect(33);
      CRTable.MakeOption(gL, gR);
    END ELSE IF (sym = 34) THEN BEGIN
      Get;
      _TokenExpr(gL, gR);
      Expect(35);
      CRTable.MakeIteration(gL, gR);
    END ELSE BEGIN SynError(45);
    END;
  END;

PROCEDURE _TokenTerm (VAR gL, gR: INTEGER);
  VAR
    gL2, gR2: INTEGER;
  BEGIN
    _TokenFactor(gL, gR);
    WHILE (sym = 1) OR (sym = 2) OR (sym = 28) OR (sym = 32) OR (sym = 34) DO BEGIN
      _TokenFactor(gL2, gR2);
      CRTable.ConcatSeq(gL, gR, gL2, gR2);
    END;
    IF (sym = 37) THEN BEGIN
      Get;
      Expect(28);
      _TokenExpr(gL2, gR2);
      SetCtx(gL2); CRTable.ConcatSeq(gL, gR, gL2, gR2);
      Expect(29);
    END;
  END;

PROCEDURE _Factor (VAR gL, gR: INTEGER);
  VAR
    sp, kind:    INTEGER;
    name:        CRTable.Name;
    gn:          CRTable.GraphNode;
    sn:          CRTable.SymbolNode;
    oneSet:      CRTable.CRTSet;
    undef, weak: BOOLEAN;
    pos:         CRTable.Position;
  BEGIN
    gL :=0; gR := 0; weak := FALSE;
    CASE sym OF
      1, 2, 31 : BEGIN
        IF (sym = 31) THEN BEGIN
          Get;
          weak := TRUE;
        END;
        _Symbol(name, kind);
        sp := CRTable.FindSym(name); undef := sp = CRTable.noSym;
        IF undef THEN
          IF kind = ident
            THEN  (* forward nt *)
              sp := CRTable.NewSym(CRTable.nt, name, 0)
            ELSE IF CRTable.genScanner THEN
              BEGIN
                sp := CRTable.NewSym(CRTable.t, name, CRS.line);
                MatchLiteral(sp)
              END
            ELSE BEGIN (* undefined string in production *)
              SemError(106); sp := 0
            END;
        CRTable.GetSym(sp, sn);
        IF (sn.typ <> CRTable.t) AND (sn.typ <> CRTable.nt) THEN SemError(104);
        IF weak THEN
          IF sn.typ = CRTable.t
            THEN sn.typ := CRTable.wt
            ELSE SemError(123);
        gL := CRTable.NewNode(sn.typ, sp, CRS.line); gR := gL;
        IF (sym = 38) OR (sym = 40) THEN BEGIN
          _Attribs(pos);
          CRTable.GetNode(gL, gn); gn.pos := pos;
          CRTable.PutNode(gL, gn);
          CRTable.GetSym(sp, sn);
          IF sn.typ <> CRTable.nt THEN SemError(103);
          IF undef THEN
            BEGIN sn.attrPos := pos; CRTable.PutSym(sp, sn) END
            ELSE IF sn.attrPos.beg < 0 THEN SemError(105);
        END ELSE IF _In(symSet[1], sym) THEN BEGIN
          CRTable.GetSym(sp, sn);
          IF sn.attrPos.beg >= 0 THEN SemError(105);
        END ELSE BEGIN SynError(46);
        END;
        END;
      28 : BEGIN
        Get;
        _Expression(gL, gR);
        Expect(29);
        END;
      32 : BEGIN
        Get;
        _Expression(gL, gR);
        Expect(33);
        CRTable.MakeOption(gL, gR);
        END;
      34 : BEGIN
        Get;
        _Expression(gL, gR);
        Expect(35);
        CRTable.MakeIteration(gL, gR);
        END;
      42 : BEGIN
        _SemText(pos);
        gL := CRTable.NewNode(CRTable.sem, 0, 0); gR := gL;
        CRTable.GetNode(gL, gn);
        gn.pos := pos;
        CRTable.PutNode(gL, gn);
        END;
      26 : BEGIN
        Get;
        Sets.Fill(oneSet); Sets.Excl(oneSet, CRTable.eofSy);
        gL := CRTable.NewNode(CRTable.any, CRTable.NewSet(oneSet), 0); gR := gL;
        END;
      36 : BEGIN
        Get;
        gL := CRTable.NewNode(CRTable.sync, 0, 0); gR := gL;
        END;
    ELSE BEGIN SynError(47);
        END;
    END;
  END;

PROCEDURE _Term (VAR gL, gR: INTEGER);
  VAR
    gL2, gR2: INTEGER;
  BEGIN
    gL := 0; gR := 0;
    IF _In(symSet[2], sym) THEN BEGIN
      _Factor(gL, gR);
      WHILE _In(symSet[2], sym) DO BEGIN
        _Factor(gL2, gR2);
        CRTable.ConcatSeq(gL, gR, gL2, gR2);
      END;
    END ELSE IF (sym = 11) OR (sym = 29) OR (sym = 30) OR (sym = 33) OR (sym = 35) THEN BEGIN
      gL := CRTable.NewNode(CRTable.eps, 0, 0); gR := gL;
    END ELSE BEGIN SynError(48);
    END;
  END;

PROCEDURE _Symbol (VAR name: CRTable.Name; VAR kind: INTEGER);
  VAR
    myName: STRING;
  BEGIN
    IF (sym = 1) THEN BEGIN
      _Ident(name);
      kind := ident;
    END ELSE IF (sym = 2) THEN BEGIN
      Get;
      CRS.GetName(CRS.pos, CRS.len, myName);
      kind := stringSym;
      FixString(myName, CRS.len);
      name := myName;
    END ELSE BEGIN SynError(49);
    END;
  END;

PROCEDURE _SingleChar (VAR n: INTEGER);
  VAR
    i: INTEGER;
    s: STRING;
  BEGIN
    Expect(27);
    Expect(28);
    Expect(4);
    CRS.GetName(CRS.pos, CRS.len, s);
    Val(s, n, i);
    IF n > 255 THEN BEGIN SemError(118); n := n MOD 256 END;
    IF CRTable.ignoreCase THEN n := ORD(UpCase(CHR(n)));
    Expect(29);
  END;

PROCEDURE _SimSet (VAR oneSet: CRTable.CRTSet);
  VAR
    i, n1, n2: INTEGER;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合久久鬼色| 久久久三级国产网站| 成人综合婷婷国产精品久久免费| 日日夜夜精品视频天天综合网| 午夜精品福利一区二区三区av | 国产欧美一区二区三区在线看蜜臀 | 欧美一区二区美女| 91精品欧美一区二区三区综合在 | 怡红院av一区二区三区| 亚洲精品国产无天堂网2021| 亚洲蜜桃精久久久久久久| 一区二区成人在线| 亚洲福中文字幕伊人影院| 亚洲国产精品一区二区久久恐怖片| 亚洲国产aⅴ成人精品无吗| 精品在线你懂的| 婷婷国产在线综合| 久久精品国产**网站演员| 国产精品一区二区三区网站| 成人av在线一区二区| 91国偷自产一区二区开放时间| 欧美日韩国产在线播放网站| 制服.丝袜.亚洲.中文.综合| 久久久青草青青国产亚洲免观| 中文字幕一区二区三区四区| 五月天网站亚洲| 国产成人在线色| av中文字幕在线不卡| 欧美人狂配大交3d怪物一区| 国产亚洲精久久久久久| 一区二区三区中文字幕在线观看| 日韩精品电影在线观看| 成人做爰69片免费看网站| 欧美挠脚心视频网站| 欧美激情一区二区三区全黄| 午夜亚洲国产au精品一区二区| 国内欧美视频一区二区| 在线观看网站黄不卡| 国产午夜精品久久久久久久| 午夜私人影院久久久久| 丁香一区二区三区| 日韩一区二区麻豆国产| 亚洲麻豆国产自偷在线| 国产又粗又猛又爽又黄91精品| 在线观看亚洲a| 国产精品色呦呦| 精东粉嫩av免费一区二区三区| 色综合一个色综合| 欧美极品aⅴ影院| 久久精品久久精品| 欧美久久久一区| 亚洲女厕所小便bbb| 丰满亚洲少妇av| 久久这里只精品最新地址| 丝袜亚洲另类欧美综合| 欧美性xxxxxxxx| 一区二区三区精品久久久| 成人在线一区二区三区| 久久久久久久综合| 狠狠色丁香久久婷婷综| 日韩精品最新网址| 日本中文在线一区| 欧美一区永久视频免费观看| 亚洲午夜激情av| 91精彩视频在线观看| 亚洲女性喷水在线观看一区| www.色综合.com| 中文字幕中文乱码欧美一区二区| 国产精品亚洲第一区在线暖暖韩国| 欧美一级淫片007| 免费成人av资源网| 亚洲一区在线观看免费| 欧美美女直播网站| 曰韩精品一区二区| 日本高清成人免费播放| 亚洲精品一区在线观看| 捆绑调教一区二区三区| 欧美一区二区三区系列电影| 五月婷婷久久丁香| 欧美日韩免费观看一区三区| 亚洲成人一区二区在线观看| 欧美日韩一区二区三区在线看| 午夜精品久久一牛影视| 欧美久久久久久久久久| 日本不卡在线视频| 日韩精品在线看片z| 国产一区二区不卡老阿姨| 国产日韩精品一区二区三区在线| 粉嫩久久99精品久久久久久夜| 国产精品成人在线观看| 欧美色综合影院| 美美哒免费高清在线观看视频一区二区 | 亚洲精品伦理在线| 欧美视频在线一区| 日本va欧美va欧美va精品| 欧美tickling网站挠脚心| 成人性生交大片免费看视频在线| 中文字幕一区二区日韩精品绯色| 色94色欧美sute亚洲线路一久| 亚洲影院在线观看| 日韩女优制服丝袜电影| 成人激情电影免费在线观看| 亚洲欧美电影院| 精品国产乱码久久久久久牛牛| 高清不卡一区二区| 亚洲一级二级三级| 久久亚洲一级片| 色婷婷国产精品综合在线观看| 肉色丝袜一区二区| 国产欧美视频一区二区| 色综合久久久久综合99| 麻豆91在线观看| 一区二区三区久久| 久久精品夜色噜噜亚洲a∨| 欧美亚洲一区二区在线观看| 久久99精品久久久久久动态图| 亚洲视频一二三区| 久久只精品国产| 欧美日韩国产精选| 91在线国产福利| 九九九久久久精品| 亚洲va欧美va人人爽| 国产精品污网站| 精品国产一二三区| 欧美日韩精品一区视频| 成人激情黄色小说| 精品中文av资源站在线观看| 亚洲午夜久久久久久久久电影院| 欧美国产综合色视频| 51精品秘密在线观看| 一本一道波多野结衣一区二区| 国产九色精品成人porny| 奇米色一区二区三区四区| 一区二区三区精品视频在线| 欧美国产乱子伦| 亚洲精品在线免费播放| 91精品国产综合久久小美女| 日本乱人伦一区| 97se亚洲国产综合自在线不卡| 国产精品自产自拍| 国内精品伊人久久久久av一坑| 免费成人结看片| 男女激情视频一区| 免费成人性网站| 精品中文av资源站在线观看| 琪琪一区二区三区| 秋霞av亚洲一区二区三| 丝袜美腿一区二区三区| 天天av天天翘天天综合网色鬼国产| 亚洲精品欧美二区三区中文字幕| 日韩美女视频一区| 1区2区3区精品视频| 亚洲欧洲无码一区二区三区| 1024亚洲合集| 亚洲精品伦理在线| 亚洲国产精品精华液网站 | 欧美一区日韩一区| 欧美一级午夜免费电影| 欧美一级二级三级乱码| 欧美一区二区三区人| 日韩欧美资源站| 亚洲精品一区二区三区四区高清| 久久久亚洲欧洲日产国码αv| 国产日韩欧美一区二区三区综合 | 成人免费高清视频| 99久久精品国产毛片| 91蝌蚪porny| 欧美三级日韩三级国产三级| 欧美电影在线免费观看| 日韩欧美在线综合网| 久久精品欧美日韩| 亚洲三级在线免费观看| 亚洲成人福利片| 久久精品国产精品亚洲综合| 国产成人av电影在线| 91在线观看一区二区| 欧美日韩国产免费| 国产喂奶挤奶一区二区三区| 日韩毛片高清在线播放| 日韩1区2区日韩1区2区| 国产成人免费视频网站| 欧日韩精品视频| 久久老女人爱爱| 一区二区不卡在线视频 午夜欧美不卡在| 丝袜美腿成人在线| 国产成a人亚洲精品| 欧美亚洲动漫另类| 欧美精品一区二| 一区二区激情小说| 国产精品456| 欧美一区午夜精品| 专区另类欧美日韩| 精品一区二区三区日韩| 色视频成人在线观看免| 久久日韩粉嫩一区二区三区| 亚洲gay无套男同| 不卡视频一二三| 欧美精品一区二区三区在线 | 中文在线免费一区三区高中清不卡| 伊人婷婷欧美激情|