📄 rfc5.txt
字号:
'- 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 .endSAMPLE 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -