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

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

?? 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;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu精品一区二区三区四区在线| 欧美日本在线观看| 国产亚洲欧美在线| 国产激情视频一区二区在线观看| 精品久久人人做人人爽| 国产一区久久久| 亚洲欧洲日产国码二区| 日本道免费精品一区二区三区| 亚洲影院免费观看| 91.xcao| 开心九九激情九九欧美日韩精美视频电影| 日韩欧美黄色影院| 成人性生交大片免费看中文网站| 亚洲欧美一区二区三区极速播放 | 亚洲精品国产a久久久久久| 91麻豆国产自产在线观看| 午夜精品一区二区三区电影天堂| 日韩色在线观看| 成人综合日日夜夜| 亚洲va欧美va人人爽| 亚洲精品一区二区三区蜜桃下载| 不卡一区二区在线| 日韩国产一二三区| 国产农村妇女毛片精品久久麻豆| 91成人看片片| 极品销魂美女一区二区三区| 一区在线播放视频| 日韩一区和二区| 91麻豆免费看| 国产中文一区二区三区| 亚洲精品久久久久久国产精华液| 在线不卡中文字幕| 成人精品国产一区二区4080| 午夜a成v人精品| 国产精品初高中害羞小美女文| 91精品啪在线观看国产60岁| 大尺度一区二区| 亚洲h动漫在线| 一区在线观看免费| ww久久中文字幕| 欧美性大战久久久久久久蜜臀| 国产一区日韩二区欧美三区| 亚洲成在人线在线播放| 中文字幕一区二区三区在线不卡| 51精品秘密在线观看| 99re在线精品| 国产精品影视网| 日韩福利电影在线| 一区二区三区色| 国产精品乱人伦中文| 欧美tickling网站挠脚心| 日本国产一区二区| 成人福利视频在线| 国产一区二区三区高清播放| 免费在线一区观看| 亚洲国产精品一区二区www在线| 日本一区二区成人| 欧美精品一区二区高清在线观看 | 91精品欧美综合在线观看最新| 成人性视频网站| 国产suv精品一区二区6| 精品亚洲欧美一区| 男男gaygay亚洲| 日韩福利电影在线观看| 午夜a成v人精品| 五月天一区二区| 亚洲综合一区二区三区| 亚洲另类春色校园小说| 亚洲欧美日韩人成在线播放| 国产精品久久777777| 国产精品久线在线观看| 国产精品久久久久影院色老大 | 99在线精品免费| 成人黄色大片在线观看| 成人h版在线观看| 成人免费看视频| 成人高清视频在线观看| 久久免费国产精品| 精品乱码亚洲一区二区不卡| 欧美本精品男人aⅴ天堂| 日韩精品中文字幕一区二区三区| 欧美日韩一区精品| 欧美日韩极品在线观看一区| 91精选在线观看| 亚洲欧美综合网| 亚洲欧美国产高清| 亚洲精品中文字幕在线观看| 亚洲一区二区av在线| 亚洲国产精品欧美一二99| 香蕉av福利精品导航 | 91麻豆蜜桃一区二区三区| 成人性生交大片免费看中文| 成人国产视频在线观看| 色综合久久中文综合久久牛| 在线视频欧美区| 欧美男女性生活在线直播观看| 欧美一级黄色片| 亚洲精品在线三区| 国产精品嫩草影院av蜜臀| 亚洲色图清纯唯美| 午夜在线成人av| 激情小说欧美图片| 粉嫩13p一区二区三区| 一本大道综合伊人精品热热 | 欧美一区日韩一区| 久久先锋影音av| 亚洲免费在线播放| 免费成人美女在线观看.| 国产超碰在线一区| 在线观看成人免费视频| 欧美一级免费观看| 国产精品国产三级国产aⅴ入口| 亚洲国产aⅴ天堂久久| 国产一区二区电影| 精品视频免费看| 国产欧美日韩在线| 亚洲bt欧美bt精品777| 国产成人精品综合在线观看 | 亚洲综合偷拍欧美一区色| 欧美a一区二区| 成人app在线| av一本久道久久综合久久鬼色| 欧美日韩一级片网站| 国产调教视频一区| 亚洲精品国产无天堂网2021| 日韩激情在线观看| 国产美女在线观看一区| 99国产精品国产精品久久| 色狠狠一区二区三区香蕉| 欧美精三区欧美精三区| 精品少妇一区二区三区 | 欧美精品三级日韩久久| 国产欧美一区二区精品性色超碰| 日韩在线播放一区二区| 91女神在线视频| 久久久另类综合| 日本伊人午夜精品| 亚洲精品免费视频| 日本欧美大码aⅴ在线播放| 精品一区二区三区视频在线观看| 日本黄色一区二区| 国产精品丝袜91| 国产综合一区二区| 欧美精品少妇一区二区三区| 亚洲精品亚洲人成人网| 成人在线一区二区三区| www亚洲一区| 欧美a一区二区| 正在播放一区二区| 亚洲国产日韩精品| 色综合久久久网| 国产精品福利一区二区| 成人午夜激情影院| 久久精品这里都是精品| 久久er精品视频| 日韩免费高清电影| 欧美aa在线视频| 一区二区三区在线免费| av成人动漫在线观看| 国产精品天天看| 豆国产96在线|亚洲| 国产女人aaa级久久久级| 国产成a人无v码亚洲福利| 久久久久亚洲综合| 国产99一区视频免费 | 国产精品麻豆久久久| 丁香一区二区三区| 国产欧美一区二区三区网站| 国产一本一道久久香蕉| 国产亚洲女人久久久久毛片| 毛片av一区二区| 日韩一区二区三区电影| 亚洲va韩国va欧美va| 欧美一区二区三区在| 五月婷婷综合网| 欧美日韩免费电影| 亚洲综合自拍偷拍| 91福利精品视频| 日本精品一级二级| 亚洲精品免费在线| 色综合久久久久网| 亚洲欧美日韩精品久久久久| 91亚洲精品久久久蜜桃网站 | 一区二区三区色| 精品视频在线免费看| 日韩电影在线免费观看| 2020日本不卡一区二区视频| 成人免费视频播放| 一区二区高清视频在线观看| 3d成人h动漫网站入口| 韩国毛片一区二区三区| 最好看的中文字幕久久| 欧美最新大片在线看| 久久99精品国产麻豆婷婷洗澡| 欧美精品一区二区久久婷婷| 91蜜桃在线观看| 美女性感视频久久| 日韩理论片在线| 日韩欧美美女一区二区三区| 成人爱爱电影网址|