-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsyntax10
91 lines (65 loc) · 2.29 KB
/
syntax10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Jam: 3/26/95
============
<expr> := <constant>
| <val-id>
| <lval>
| <expr> [ <expr> , <expr> ]
| <expr> [ <expr> ]
| [ <seq> { ; <seq> }* ]
| { <seq> }
| <expr> ( <args> )
| if <expr> then <expr> { elseif <expr> then <expr> }*
( { else <expr> } | { endif } )
| let <defn>* in <expr>
| do <seq> and <expr>
| set <lval> to <expr>
| call <fun-id> ( <inits> ) <expr>
| <uop> <expr>
| <expr> <bop> <expr>
| ( <expr> )
<constant> := true | false | <symbol> | <number>
| <string> ;; do we have these?
<val-id> := <cons-id> | <fun-id> | <arg-id> | <array-id> | <sel-id> | <pred-id>
| <prim>
<lval> := <set-id> | <sel-id> ( <expr> ) | <expr> [ <expr> ] | <expr> [ <expr> ]
<seq> := <expr> { , <expr> }*
<args> := epsilon | <seq>
<defn> := <set-id> = <expr>
| <fun-id> ( <formals> ) = <expr>
| <const-id> : <pred-id>
| <cons-id> ( <sel> { , <sel> }* ) : <pred-id>
| <array-id> [ <expr> ] = <expr>
| <array-id> [ <expr>, <expr> ] = <expr>
<formals> := epsilon | <arg-id> { , <arg-id> }*
<sel> := <sel-id> { : <pred-id> }
<inits> := epsilon | <arg-id> = <expr> { , <arg-id> = <expr> }*
<uop> := - | + | ~
<bop> := + | - | * | / | ^ | = | <= | >= | =/= | < | > | & | |
<prim> := symbol? | same?
| number? | zero? | positive? | add1 | sub1 | odd? | sqrt | log
| sin | cos | tan | atan
| matrix?
| constructor? | constructed? | prim? ;; do we need or want these?
| function? | arity
| array? | length | sameArray?
| list? | empty? | cons? | cons | first | rest
| equal?
<symbol> := ` <char>* '
<string> := " <char>* "
<char> := <charset> \ { \ , ` , ' , " , tab , newline}
| \\ | \` | \'| \" | \n | \t
<number> := <real> | <imag>
<imag> := <real> i
<real> := <sign> <ureal>
<sign> := epsilon | + | -
<ureal> := <int>
| . <digit>+ <suffix>
| <digit>+ . <digit>* <suffix>
<int> := <digit>+ <suffix>
<suffix> := epsilon | e <sign> <digit>+
<digit> := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<value> := <constant>
| <val-id>
| <cons-id>( <vals> )
| [ <vals> ]
<vals> := epsilon | <value> { , <value> }*