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 + -
显示快捷键?