rfc5.txt

来自「RFC 的详细文档!」· 文本 代码 · 共 950 行 · 第 1/2 页

TXT
950
字号
         '- sum /

         -empty);

      term = factor (

         '* term /

         '/ term /

         '(up arrow symbol) term /

         .empty);

      factor = '- factor / bitop;

      bitop = compliment (

         '/' bitop /

         '/'\ bitop /

         '& bitop / (

         .empty);

      compliment = "--" primary / primary;

   (symbol for up arrow) means mod. and /\ means exclusive or.

   Notice that the uniary minus is allowable, and parsed so you can
   write x*-y.

   Since there is no standard convention with bitwise operators, they
   all have the same precedence, and parentheses must be used for
   grouping.

   Compliment is the l's compliment.

   It is assumed that all arithmetic and bit operations take place in
   the mode and style of the machine running the code.  Anyone who
   takes advantage of word lengths, two's compliment arithmetic, etc.
   will eventually have problems.

PRIMARY

   SYNTAX

      primary =

         constant /

         builtin /

         variable / (

         block /

         '( exp ');

      variable = .id (

         '(symbol for left arrow) exp /

         '( block ') /

         .empty);

      constant =  integer / real / string;

      builtin =

         mesinfo /

         cortnin /

         ("MIN" / "MAX") exp $('. exp) '/ ;

   parenthesized expressions may be a series of expressions.  The
   value of a series is the value of the last one executed at run time.

   Subroutines may have one call by name argument.

   Expressions may be mixed.  Strings are a big problem?  Rulifson
   also wants to get rid of real numbers!!

CONJUNCTIVE EXPRESSION

   SYNTAX

      conjunct = disjunct ("AND" conjunct / .empty);

      disjunct = negation ("OR" negation / .empty);

      negation = "NOT" relation / relation;

      relation =

         '( conjunct ') /

         sum (

           "<=" sum /

           ">=" sum /

           '< sum /

           '> sum /

           '= sum /

           '" sum /

           .empty);

   The conjunct construct is rigged in such a way that a conjunct
   which is not a sum need not have a value, and may be evaluated
   using jumps in the code.  Reference to the conjunct is made only
   in places where a logical decision is called for (e.g. if and
   while statements).

   We hope that most compilers will be smart enough to skip
   unnecessary evaluations at run time.  I.e a conjunct in which the
   left part is false or a disjunct with the left part true need not
   have the corresponding right part evaluated.

ARITHMETIC EXPRESSION

   SYNTAX

      statement = conditional / unconditional;

      unconditional = loopst / cases / cibtrikst / uist / treest /
      block / null / exp;

      conditional = "IF" conjunct "THEN" unconditional (

         "ELSE" conditional /

         .empty);

      block = "begin" exp $('; exp) "end";

   An expressions may be a statement.  In conditional statements the
   else part is optional while in expressions it is mandatory.  This
   is a side effect of the way the left part of the syntax rules are
   ordered.

SEMI-TREE MANIPULATION AND TESTING

   SYNTAX

      treest = setpntr / insertpntr / deletepntr;

      setpntr = "set" "pointer" pntrname "to" pntrexp;

      pntrexp = direction pntrexp / pntrname;

      insertpntr = "insert" pntrexp "as"

         (("left" / "right") "brother") /

         (("first" / "last: ) "daughter") "of" pntrexp;

      direction =

         "up" /

         "down" /

         "forward" /

         "backward: /

         "head" /

         "tail";

      plantree = "replace" pntrname "with" pntrexp;

      deletepntr = "delete: pntrname;

      tree = '( tree1 ') ;

      tree1 = nodename $nodename ;

      nodename = terminal / '( tree1 ');

      terminal = treename / buffername / point ername;

      treename = id;

      treedecl = "pointer" .id / "tree" .id;

   Extra parentheses in tree building results in linear subcategorization,
   just as in LISP.

FLOW AND CONTROL

   controlst = gost / subst / loopstr / casest;

   GO TO STATEMENTS

      gost = "GO" "TO" (labelv / .id);

         assignlabel = "ASSIGN" .id "TO" labelv;

   SUBROUTINES

      subst = callst / returnst / cortnout;

         callst = "CALL" procname (exp / .emptyu);

         returnst = "RETURN" (exp / .empty);

         cortnout = "STUFF" exp "IN" pipename;

      cortnin = "FETCH" pipename;

      FETCH is a builtin function whose value is computed by envoking
      the named co-routine.

   LOOP STATEMENTS

      SYNTAX

         loopst = whilest / untilst / forst;

         whilest = "WHILE" conjunct "DO" statement;

         untilst = "UNTIL" conjunct "DO" statement;

         forst = "FOR" integerv '- exp ("BY" exp / .empty) "TO" exp

         "DO" statements;

      The value of while and until statements is defined to be false
      and true (or 0 and non-zero) respectively.

      For statements evaluate their initial exp, by part, and to part
      once, at initialization time.  The running index of for
      statements is not available for change within the loop, it may
      only be read.  If, some compilers can take advantage of this
      (say put it in a register) all the better.  The increment and
      the to bound will both be rounded to integers during the
      initialization.

CASE STATEMENTS

   SYNTAX

      casest = ithcasest / condcasest;

      ithcasest = "ITHCASE" exp "OF" "BEGIN" statement $(';
      statement) "END";

      condcasest = "CASE" exp "OF" "BEGIN" condcs $('; condcs)
      "OTHERWISE" statement "END";


      condcs = conjunct ': statement;

   The value of a case statement is the value of the last case executed.

EXTRA STATEMENTS

   null = "NULL";

I/O STATEMENTS

   iost = messagest / dspyst ;

   MESSAGES

      SYNTAX

         messagest = buildmes / demand;

            buildmest = startmes / appendmes / sendmes;

              startmes = "start" "message";

              appendmes = "append" "message" "byute" exp;

              sendmes = "send" "message";

              
           demandmes = "demand" "Message";

      mesinfo =

         "get" "message" "byte"

         "message1" "length" /

         "message" empty: '?;

      mesdecl = "message" "bytes" "are" ,byn "bits" long" '..

DISPLAY BUFFERS

   SYNTAX

      dspyst = startbuffer / bufappend / estab;

      startbuffer - "start" "buffer";

      bufappend = "append" bufstuff $('& bufstuff);

      bufstuff = :

         "parameters" dspyparm $('. dspyparm) /

         "character" exp /

         "string"1 strilng /

         "vector" ("from" exp ':exp / .empty) "to" exp '. exp /

         "position" (onoff / .empty) "beam" "to" exp '= exp/

         curve" ;

      dspyparm F :

         "intensity" "to" exp /

         "character" "width" "to" exp /

         "blink" onoff /

        "italics" onff;

      onoff = "on" / "off";

      estab = "establish" buffername;

   LOGICAL SCREEN

      The screen is taken to be a square.  The coordinates are
      normalized from -1 to +1 on both axes.

      Associated with the screen is a position register, called
      PREG.  The register is a triple <x.y.r> where x and y 
      specify a point on the screen and r is a rotation in
      radians, counter clockwise, from the x-axis.

      The intensity, called INTENSITY, is a real number in the
      range from 0 to 1.  0 is black, 1 is as light as your
      display can go, and numbers in between specify the relative
      log of the intensity difference.

      Character frame size.

      Blink bit.

   BUFFER BUILDING

      The terminal nodes of semi-trees are either semi-tree names
      or display buffers.  A display buffer is a series of logical
      entities, called bufstuff.

      When the buffer is initilized, it is empty.  If no
      parameters are initially appended, those in effect at the
      end of the display of the last node in the semi-tree will be in
      effect for the display of this node.

      As the buffer is built, the logical entities are added to it.
      When it is established as a buffername, the buffer is
      closed, and further appends are prohibited.  It is only a
      buffername has been established that it may be used in a tree
      building statement.

   LOGICAL INPUT DEVICES

      Wand

      Joy Stick

      Keyboard

      Buttons

      Light Pens

      Mice

   AUDIO OUTPUT DEVICES

   .end


SAMPLE PROGRAMS

   Program to run display and keyboard as tty.

   to run NLS

      input part

      display part

         DEMAND MESSAGE;

         While LENGTH " O DO

            ITHCASE GETBYTE OF Begin

            ITHCASE GETBYTE OF %file area uipdate% BEGIN

               %literal area%

               %message area%

               %name area%

               %bug%

               %sequence specs%

               %filter specs%

               %format specs%

               %command feedback line%

               %filer area%

               %date time%

               %echo register%

           BEGIN %DEL control%

DISTRIBUTION LIST

   Steve Carr
      Department of Computer Science
      University of Utah
      Salt Lake City, Utah  84112
      Phone 801-322-7211 X8224

   Steve Crocker

      Boelter Hall
      University of California
      Los Angeles, California
      Phone 213-825-4864

   Jeff Rulifson

      Stanford Research Institute
      333 Ravenswood
      Menlo Park, California  94035
      Phone 415-326-6200 X4116

   Ron Stoughton

      Computer Research Laboratory
      University of California
      Santa Barbara, California  93106
      Phone 805-961-3221

   Mehmet Baray

      Corey Hall
      University of California
      Berkeley, California  94720
      Phone 415-843-2621

        


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?