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

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

?? cr.frm

?? 一個(gè)Pascal語言分析器
?? FRM
字號(hào):
(* CR   Main Module of Coco/R
   ==   =====================

   This is a compiler generator that produces a scanner and a parser
   from an attributed grammar, and optionally a complete small compiler.

   Original code in Oberon by Hanspeter Moessenboeck, ETH Zurich
   Ported at ETH to Apple Modula, and thence to JPI-2 Modula.

   JPI version of 27 January 1991 was then modified to make more
   portable by Pat Terry, January - October 1992

   This is the IBM-PC MS-DOS Turbo Pascal version for generating Turbo Pascal
   based on the port first done by Volker Pohlers, October 1995


Usage:
          COCOR [-options] GrammarName[.atg] [$options]

Input:
  attributed grammar   input grammar
  scanner.frm          frame file
  parser.frm           frame file
  compiler.frm         frame file (optional)

(Frame files must be in the sme directory as the grammar, or may be
found on a path specified by DOS environment variable CRFRAMES).

Output:
  <GrammarName>S.pas  generated scanner
  <GrammarName>P.pas  generated parser
  <GrammarName>.err   error numbers and corresponding error messages
  <GrammarName>.lst   source listing with error messages and trace output

Optionally

  <GrammarName>G.pas  generated symbolic names
  <GrammarName>.pas   generated compiler main module

Implementation restrictions
  1  too many nodes in graph (>1500)                 CRTable.NewNode
  2  too many symbols (>500)                         CRTable.NewSym, MovePragmas
  3  too many sets (>256 ANY-syms or SYNC syms)      CRTable.NewSet,
  4  too many character classes (>250)               CRTable.NewClass
  5  too many conditions in generated code (>100)    CRX.NewCondSet
  6  too many token names in "NAMES" (>100)          CRTable.NewName
  7  too many states in automata (>500)              CRA.NewState

Trace output
(To activate a trace switch, write "${letter}" in the input grammar, or
invoke Coco with a second command line parameter)

  A  Prints states of automaton

  C  Generates complete compiler module

  F  Prints start symbols and followers of nonterminals.

  G  Prints the top-down graph.

  I  Trace of start symbol set computation.

  L  Forces a listing (otherwise a listing is only printed if errors are found).
  
  N  Uses default names for symbol value constants.  This generates an
     extra module <grammar name>G, and corresponding import statements
     using constant names instead of numbers for symbols in parser and
     scanner.
     The constants are used unqualified and hence all needed constants
     have to be imported; so a complete import list for these constants
     is generated.
     There is no decision whether a constant is actually needed.

     The default conventions are (only terminals or pragmas can have names):
     single character   -->  <ASCII name (lowercase)>Sym
          eg. "+"       -->  plusSym
     character string   -->  <string>Sym
          eg. "PROGRAM" -->  PROGRAMSym
     scanner token      -->  <token name>Sym
          eg. ident     -->  identSym

  O  Trace of follow set computation (not yet implemented).

  P  Generates parser only

  S  Prints the symbol list.

  T  Suppresses generation of units (grammar tests only).

  X  Prints a cross reference list.

==========================================================================*)

PROGRAM -->Grammar;

USES -->Scanner, (* lst, src, errors, directory, Error, CharAt *)
     -->Parser, (* Parse *)
     CRC, CRTable, CRA, CRX, FileIO;

CONST
  ATGExt = '.atg';
  LSTExt = '.lst';
  Version = '1.48 (for Pascal)';
  ReleaseDate = '9 July 1999';

VAR
  Options, GrammarName, ATGFileName, lstFileName : STRING;
  ll1 : BOOLEAN; (* TRUE, if grammar is LL(1) *)
  ok : BOOLEAN;  (* TRUE, if grammar tests ok so far *)
  P : INTEGER;   (* ParamCount *)

(* ------------------- Source Listing and Error handler -------------- *)

  TYPE
    CHARSET = SET OF CHAR;
    Err = ^ErrDesc;
    ErrDesc = RECORD
      nr, line, col: INTEGER;
      next: Err
    END;

  CONST
    TAB  = #09;
    _LF  = #10;
    _CR  = #13;
    _EF  = #0;
    LineEnds : CHARSET = [_CR, _LF, _EF];

  VAR
    firstErr, lastErr: Err;
    Extra : INTEGER;

  PROCEDURE StoreError (nr, line, col: INTEGER; pos: LONGINT); FAR;
  (* Store an error message for later printing *)
    VAR
      nextErr: Err;
    BEGIN
      NEW(nextErr);
      nextErr^.nr := nr; nextErr^.line := line; nextErr^.col := col;
      nextErr^.next := NIL;
      IF firstErr = NIL
        THEN firstErr := nextErr
        ELSE lastErr^.next := nextErr;
      lastErr := nextErr;
      INC(errors)
    END;

  PROCEDURE GetLine (VAR pos  : LONGINT;
                     VAR line : STRING;
                     VAR eof  : BOOLEAN);
  (* Read a source line. Return empty line if eof *)
    VAR
      ch: CHAR;
      i:  INTEGER;
    BEGIN
      i := 1; eof := FALSE; ch := CharAt(pos); INC(pos);
      WHILE NOT (ch IN LineEnds) DO BEGIN
        line[i] := ch; INC(i); ch := CharAt(pos); INC(pos)
      END;
      line[0] := Chr(i-1);
      eof := (i = 1) AND (ch = _EF);
      IF ch = _CR THEN BEGIN (* check for MsDos *)
        ch := CharAt(pos);
        IF ch = _LF THEN BEGIN INC(pos); Extra := 0 END
      END
    END;

  PROCEDURE PrintErr (line : STRING; nr, col: INTEGER);
  (* Print an error message *)

    PROCEDURE Msg (s: STRING);
      BEGIN
        Write(lst, s)
      END;

    PROCEDURE Pointer;
      VAR
        i : INTEGER;
      BEGIN
        Write(lst, '*****  ');
        i := 0;
        WHILE i < col + Extra - 2 DO BEGIN
          IF line[i] = TAB
            THEN Write(lst, TAB)
            ELSE Write(lst, ' ');
          INC(i)
        END;
        Write(lst, '^ ')
      END;

    BEGIN
      Pointer;
      CASE nr OF
       -->Errors
        102 : Msg('string literal may not extend over line end');
        103 : Msg('a literal must not have attributes');
        104 : Msg('this symbol kind not allowed in production');
        105 : Msg('attribute mismatch between declaration and use');
        106 : Msg('undefined string in production');
        107 : Msg('name declared twice');
        108 : Msg('this type not allowed on left side of production');
        109 : Msg('earlier semantic action was not terminated');
        111 : Msg('missing production for grammar name');
        112 : Msg('grammar symbol must not have attributes');
        113 : Msg('a literal must not be declared with a structure');
        114 : Msg('semantic action not allowed here');
        115 : Msg('undefined name');
        116 : Msg('attributes not allowed in token declaration');
        117 : Msg('name does not match grammar name');
        118 : Msg('unacceptable constant value');
        119 : Msg('may not ignore CHR(0)');
        120 : Msg('token may not be empty');
        121 : Msg('token must not start with an iteration');
        122 : Msg('only characters allowed in comment declaration');
        123 : Msg('only terminals may be weak');
        124 : Msg('literal tokens may not contain white space');
        125 : Msg('comment delimiter must be 1 or 2 characters long');
        126 : Msg('character set contains more than one character');
        127 : Msg('could not make deterministic automaton');
        128 : Msg('semantic action text too long - please split it');
        129 : Msg('literal tokens may not be empty');
        ELSE BEGIN Msg('Error: '); Write(lst, nr) END
      END;
      WriteLn(lst);
    END;

  PROCEDURE PrintListing;
  (* Print a source listing with error messages *)
    VAR
      nextErr:   Err;
      eof:       BOOLEAN;
      lnr, errC: INTEGER;
      srcPos:    LONGINT;
      line:      STRING;
    BEGIN
      WriteLn(lst, 'Listing:'); WriteLn(lst);
      srcPos := 0; nextErr := firstErr;
      GetLine(srcPos, line, eof); lnr := 1; errC := 0;
      WHILE NOT eof DO BEGIN
        WriteLn(lst, lnr:5, '  ', line);
        WHILE (nextErr <> NIL) AND (nextErr^.line = lnr) DO BEGIN
          PrintErr(line, nextErr^.nr, nextErr^.col); INC(errC);
          nextErr := nextErr^.next
        END;
        GetLine(srcPos, line, eof); INC(lnr);
      END;
      IF nextErr <> NIL THEN BEGIN
        WriteLn(lst, lnr:5);
        WHILE nextErr <> NIL DO BEGIN
          PrintErr(line, nextErr^.nr, nextErr^.col); INC(errC);
          nextErr := nextErr^.next
        END
      END;
      WriteLn(lst);
      Write(lst, errC:5, ' error');
      IF errC <> 1 THEN Write(lst, 's');
      WriteLn(lst); WriteLn(lst); WriteLn(lst);
    END;

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

PROCEDURE Msg (S : STRING);
  BEGIN
    WriteLn(S);
  END;

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

PROCEDURE Help;
  BEGIN
    Msg('Usage: COCOR [-Options] [Grammar[.atg]] [-Options]');
    Msg('Example: COCOR -cs Test');
    Msg('');
    Msg('Options are');
    Msg('a  - Trace automaton');
    Msg('c  - Generate compiler module');
    Msg('f  - Give Start and Follower sets');
    Msg('g  - Print top-down graph');
    Msg('i  - Trace start set computations');
    Msg('l  - Force listing');
    Msg('n  - Generate symbolic names');
    Msg('p  - Generate parser only');
    Msg('s  - Print symbol table');
    Msg('t  - Grammar tests only - no code generated');
    Msg('x  - Print cross reference list');
    Msg('COMPILER.FRM, SCANNER.FRM and PARSER.FRM must be in the working directory,');
    Msg('or on the path specified by the environment variable CRFRAMES');
  END;

BEGIN
  firstErr := NIL; Extra := 1; P := 1;
  Write('Coco/R (MS-DOS) - Compiler-Compiler V');
  WriteLn(Version);
  WriteLn('Turbo Pascal (TM) version by Pat Terry/Volker Pohlers ', ReleaseDate);
  GrammarName := ParamStr(1);
  IF (GrammarName = '?') OR (GrammarName = '') OR (GrammarName = '/?') THEN
    BEGIN Help; HALT END;
  WHILE (Length(GrammarName) > 0) AND (GrammarName[1] IN ['-', '/']) DO BEGIN
  (* accept options before filename *) 
    SetOption(GrammarName);
    INC(P); GrammarName := ParamStr(P);
  END;
  ok := GrammarName <> '';
  REPEAT
    IF NOT ok THEN
      BEGIN
        Write('Grammar[.atg] ? : ');
        ReadLn(GrammarName);
        IF GrammarName = '' THEN HALT;
      END;
    FileIO.AppendExtension(GrammarName, ATGExt, ATGFileName);
    GrammarName := ATGFileName;
    Assign(src, GrammarName);
    {$I-} Reset(src, 1); {$I+}
    ok := IOResult = 0;
    IF NOT ok THEN WriteLn('File <', GrammarName, '> not found.');
  UNTIL ok;
  INC(P); Options := ParamStr(P);
  IF Options <> '' THEN SetOption(Options);
  FileIO.ExtractDirectory(GrammarName, directory);
  FileIO.ChangeExtension(GrammarName, LSTExt, lstFileName);
  FileIO.Open(lst, lstFileName, TRUE);
  WriteLn(lst, 'Coco/R - Compiler-Compiler V', Version);
  WriteLn(lst, 'Turbo Pascal (TM) version by Volker Pohlers/Pat Terry ', ReleaseDate);
  WriteLn(lst, 'Source file: ', GrammarName);
  WriteLn(lst);
  WriteLn; WriteLn('parsing file ', GrammarName);
  -->Scanner.Error := StoreError;
  CRP.Parse;
  IF errors = 0
    THEN
      BEGIN
        Msg('testing grammar');
        WriteLn(lst, 'Grammar Tests:'); WriteLn(lst);
        CRTable.CompSymbolSets;
        CRTable.TestCompleteness(ok);
        IF ok THEN CRTable.TestIfAllNtReached(ok);
        IF ok THEN CRTable.FindCircularProductions(ok);
        IF ok THEN CRTable.TestIfNtToTerm(ok);
        IF ok THEN CRTable.LL1Test(ll1);
        WriteLn(lst);
        IF CRTable.genScanner AND CRTable.ddt['A'] THEN CRA.PrintStates;
        IF NOT ok OR NOT ll1 OR CRTable.ddt['L'] OR CRTable.ddt['X'] THEN
          BEGIN
            Msg('listing'); PrintListing;
            IF CRTable.ddt['X'] THEN CRTable.XRef;
          END;
        IF CRTable.ddt['N'] OR CRTable.symNames THEN
          BEGIN
            Msg('symbol name assignment');
            CRTable.AssignSymNames(CRTable.ddt['N'], CRTable.symNames);
          END;
        IF ok AND NOT CRTable.ddt['T'] THEN
          BEGIN
            Msg('generating parser');
            CRX.GenCompiler;
            IF CRTable.genScanner AND NOT CRTable.ddt['P'] THEN
              BEGIN Msg('generating scanner'); CRA.WriteScanner END;
            IF CRTable.ddt['C'] THEN
              BEGIN Msg('generating compiler'); CRC.WriteDriver END;
            CRX.WriteStatistics;
          END;
        IF NOT ok
          THEN Msg('Compilation ended with errors in grammar tests.')
          ELSE IF NOT ll1 THEN Msg('Compilation ended with LL(1) errors.')
          ELSE Msg('Compilation completed. No errors detected.');
      END
    ELSE
      BEGIN
        Msg('listing'); PrintListing;
        IF CRTable.ddt['X'] THEN CRTable.XRef;
        Msg('*** errors detected ***');
      END;
  IF CRTable.ddt['G'] THEN CRTable.PrintGraph;
  IF CRTable.ddt['S'] THEN CRTable.PrintSymbolTable;
  Close(lst);
  Close(src);
END. (* -->Grammar *)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品无人码麻豆乱码1区2区| 91亚洲资源网| 一区二区三区在线视频观看| 日韩一区二区三区视频在线观看| 9久草视频在线视频精品| 日本不卡123| 亚洲激情在线播放| 中文字幕av在线一区二区三区| 欧美色国产精品| 99精品偷自拍| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲成人tv网| 亚洲欧美国产三级| 久久综合九色综合97_久久久| 欧美日韩成人在线| 91蝌蚪porny成人天涯| 国产成人精品网址| 久久成人综合网| 日产欧产美韩系列久久99| 一二三四社区欧美黄| 1024亚洲合集| 国产欧美精品一区| 久久先锋资源网| 欧美tk—视频vk| 欧美一级久久久| 日韩一级成人av| 制服视频三区第一页精品| 欧美日韩黄色影视| 欧美美女直播网站| 欧美日韩免费在线视频| 在线观看日韩国产| 在线免费观看日韩欧美| 91九色最新地址| 91久久精品一区二区三区| 色成人在线视频| 欧美视频在线观看一区| 在线视频你懂得一区二区三区| 91丨九色丨尤物| 91免费版在线看| 日本久久精品电影| 欧美性色黄大片| 欧美精品欧美精品系列| 337p亚洲精品色噜噜噜| 日韩欧美国产一区二区三区| 日韩你懂的在线观看| 精品国产91乱码一区二区三区 | 欧美艳星brazzers| 精品污污网站免费看| 欧美日韩精品一二三区| 欧美日韩激情一区二区三区| 日韩视频在线你懂得| 久久综合色天天久久综合图片| 久久久精品人体av艺术| 国产精品美女久久久久久2018| 亚洲色图在线视频| 亚洲一区二区在线观看视频| 日韩电影在线一区| 久久99精品国产.久久久久| 国产精品99久| 一本色道久久综合狠狠躁的推荐| 在线观看免费亚洲| 日韩一区二区在线免费观看| 精品福利一二区| 国产精品久久99| 亚洲成人av一区二区三区| 久久精品二区亚洲w码| 亚洲精品乱码久久久久久| 日韩精品一卡二卡三卡四卡无卡| 国产一区二区三区四区五区入口 | 99免费精品在线| 欧美性欧美巨大黑白大战| 欧美电影免费提供在线观看| 国产精品三级av| 偷拍日韩校园综合在线| 国产一区 二区| 在线观看区一区二| 久久久久国产精品麻豆ai换脸| **网站欧美大片在线观看| 三级精品在线观看| 国产成人精品免费看| 欧美在线观看一二区| 久久久久久久国产精品影院| 亚洲另类春色国产| 久久66热re国产| 色国产综合视频| 国产亚洲欧美色| 亚洲成人精品一区二区| 国产福利一区二区三区视频在线| 色偷偷一区二区三区| 精品欧美乱码久久久久久| 亚洲免费电影在线| 激情国产一区二区| 欧美亚洲一区二区在线| 欧美成人三级电影在线| 一区二区欧美精品| 成人av综合在线| 日韩手机在线导航| 亚洲国产精品一区二区www在线 | 91蜜桃在线观看| 久久日韩粉嫩一区二区三区| 亚洲高清视频在线| a亚洲天堂av| 亚洲精品一区二区三区香蕉| 亚洲一区二区3| 99热精品一区二区| 国产夜色精品一区二区av| 日韩av中文在线观看| 91天堂素人约啪| 中文字幕欧美激情一区| 久久国产精品99精品国产| 欧美日韩精品一区二区| 一二三区精品视频| 91视频免费看| 综合久久综合久久| 国产福利一区二区三区视频| 日韩一级片在线观看| 丝袜美腿亚洲一区二区图片| 欧美在线你懂的| 一区二区三区四区乱视频| 欧美一二三区在线观看| 亚洲第一狼人社区| 欧美特级限制片免费在线观看| 亚洲欧洲精品成人久久奇米网| 国产精品资源网| 日韩丝袜情趣美女图片| 蜜桃av噜噜一区二区三区小说| 日本韩国一区二区三区| 一区二区三区四区亚洲| 91老司机福利 在线| 最近日韩中文字幕| 91亚洲精品久久久蜜桃| 国产精品美女久久久久高潮| 成人少妇影院yyyy| 国产精品私房写真福利视频| 国产成人精品亚洲日本在线桃色| 国产亚洲精品7777| 国产91丝袜在线观看| 国产精品免费人成网站| 成人av在线电影| 最新日韩在线视频| 一本一道久久a久久精品| 亚洲免费在线视频一区 二区| 一本大道久久a久久精品综合| 亚洲天堂av老司机| 91国产免费看| 日韩1区2区3区| 精品美女在线播放| 国产成人av电影在线播放| 国产精品五月天| 色哟哟一区二区在线观看| 亚洲制服丝袜一区| 欧美精品高清视频| 国产在线国偷精品免费看| 国产日韩精品一区二区三区| 成人免费va视频| 亚洲午夜三级在线| 欧美一区二区免费| 粉嫩aⅴ一区二区三区四区| 国产精品久久福利| 欧美日韩情趣电影| 国产乱一区二区| 亚洲日本在线天堂| 欧美一级一区二区| 丰满亚洲少妇av| 亚洲主播在线播放| 精品久久久三级丝袜| 成人av一区二区三区| 亚洲动漫第一页| 久久久久久久久岛国免费| 91麻豆产精品久久久久久| 日本三级亚洲精品| 国产精品你懂的在线欣赏| 欧美日韩高清影院| 国产精品911| 亚洲国产成人av网| 国产网站一区二区| 欧美婷婷六月丁香综合色| 国产一区二区成人久久免费影院| 亚洲欧美二区三区| 日韩精品一区二区三区视频在线观看 | 欧美日韩二区三区| 国产高清久久久久| 亚洲第一成人在线| 欧美激情资源网| 欧美日韩一区二区三区四区 | 五月婷婷另类国产| 国产亚洲成aⅴ人片在线观看| 日本电影亚洲天堂一区| 国产精品正在播放| 亚洲成在线观看| 中文字幕国产精品一区二区| 欧美狂野另类xxxxoooo| 成人av电影观看| 久久激情五月激情| 亚洲成人动漫一区| 中文字幕一区二区三区在线观看| 日韩免费一区二区| 欧美日韩国产一区| 91日韩精品一区| 国产suv精品一区二区883|