author | Tony Garnock-Jones <tonyg@kcbbs.gen.nz> |
Thu, 22 Jan 2009 18:13:28 +0000 | |
changeset 230 | 70e311e51c29 |
parent 212 | 4dc299259002 |
child 234 | 10e62e160cb0 |
permissions | -rw-r--r-- |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
1 |
-- -*- text -*- |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
2 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
3 |
toplevel = toplevel-item:v ~_ -> v; |
184 | 4 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
5 |
toplevel-item = |
198
072745b48add
Improve parser to the point where metaeval.tng at least parses.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
186
diff
changeset
|
6 |
{#paren #namespace :prefix ?(symbol? prefix) equal :urn ?(string? urn) ~_ |
072745b48add
Improve parser to the point where metaeval.tng at least parses.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
186
diff
changeset
|
7 |
-> `(define-namespace ,prefix ,urn)} |
072745b48add
Improve parser to the point where metaeval.tng at least parses.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
186
diff
changeset
|
8 |
| {#paren #namespace :urn ?(string? urn) ~_ |
072745b48add
Improve parser to the point where metaeval.tng at least parses.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
186
diff
changeset
|
9 |
-> `(declare-default-namespace ,urn)} |
072745b48add
Improve parser to the point where metaeval.tng at least parses.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
186
diff
changeset
|
10 |
| {#paren #define :q ?(qname-or-symbol? q) equal expr:exp ~_ |
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
11 |
-> `(define-value ,q ,exp)} |
198
072745b48add
Improve parser to the point where metaeval.tng at least parses.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
186
diff
changeset
|
12 |
| {#paren #define :q ?(qname-or-symbol? q) normal-method:def ~_ |
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
13 |
-> `(define-function ,q ,def)} |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
14 |
| parse |
184 | 15 |
; |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
16 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
17 |
parse = |
230 | 18 |
~(comma | semi | arrow | equal | pipe) |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
19 |
:n |
203
580fc03b9e18
Take advantage of the corrected ometa sequence behaviour.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
202
diff
changeset
|
20 |
( grouping(n) |
198
072745b48add
Improve parser to the point where metaeval.tng at least parses.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
186
diff
changeset
|
21 |
| ?(qname-or-symbol? n) -> `(ref ,n) |
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
22 |
| ?(or (string? n) (number? n)) -> `(lit ,n) ) |
209
2f3f59f1aa69
More precise error reports.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
206
diff
changeset
|
23 |
| comma -> (error 'extra 'comma) |
2f3f59f1aa69
More precise error reports.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
206
diff
changeset
|
24 |
| semi -> (error 'extra 'semi) |
212
4dc299259002
Be more thorough about detecting misplaced -> and =.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
209
diff
changeset
|
25 |
| arrow -> (error 'extra 'arrow) |
4dc299259002
Be more thorough about detecting misplaced -> and =.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
209
diff
changeset
|
26 |
| equal -> (error 'extra 'equal) |
230 | 27 |
| pipe -> (error 'extra 'pipe) |
206
dd9c8ffca09a
Improve error reporting by being more discriminating about a common error case.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
204
diff
changeset
|
28 |
| -> (error) |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
29 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
30 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
31 |
grouping = |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
32 |
{#paren expr:e ~_ -> e} |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
33 |
| {#brack methods:ms -> `(object ,@ms)} |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
34 |
| {#brace methods:ms -> `(function ,@ms)} |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
35 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
36 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
37 |
expr = |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
38 |
:head ?(special-segment-head? head) special-segment(head) |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
39 |
| tuple:elts -> (if (= (length elts) 1) (car elts) `(tuple ,@elts)) |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
40 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
41 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
42 |
special-segment = |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
43 |
:head ?(equal? head QUOTE-QNAME) :n -> `(lit ,n) |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
44 |
| :head ?(equal? head UNQUOTE-QNAME) -> (error 'naked-unquote) |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
45 |
| #do expr:e1 semis expr:e2 |
202
65694ce5407c
Make (discard) like all other pattern ASTs: wrapped in parens.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
201
diff
changeset
|
46 |
-> `(send (function (method ((discard)) ,e2)) ,e1) |
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
47 |
| #let pattern:p equal expr:e semis expr:body |
201
9b22b7a23e39
Convert constant-methods to normal methods.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
198
diff
changeset
|
48 |
-> `(send (function (method (,p) ,body)) ,e) |
204
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
49 |
| #'%assemble' {#paren assemble-bindings:bindings ~_} {#brace assemble-clauses:clauses ~_} |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
50 |
-> `(assemble ,bindings ,clauses) |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
51 |
; |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
52 |
|
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
53 |
assemble-bindings = |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
54 |
assemble-binding:b (comma assemble-binding)*:bs -> (cons b bs) |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
55 |
| ~_ -> '() |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
56 |
; |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
57 |
|
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
58 |
assemble-binding = :n ?(qname-or-symbol? n) equal send:e -> (list n e); |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
59 |
|
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
60 |
assemble-clauses = |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
61 |
({#paren quote :n ?(qname-or-symbol? n)} | -> (error 'expected 'quoted-language-name)) |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
62 |
arrow :item &(semi | ~_) |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
63 |
semis assemble-clauses:more -> (cons (list n item) more) |
90899a08ca40
Parse '%assemble' construct.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
203
diff
changeset
|
64 |
| ~_ -> '() |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
65 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
66 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
67 |
tuple = |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
68 |
send:s (comma send)*:ss -> (cons s ss) |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
69 |
| ~_ -> '() |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
70 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
71 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
72 |
send = |
230 | 73 |
parse:receiver message*:messages |
74 |
-> (fold (lambda (msg rcvr) (msg rcvr)) receiver messages) |
|
75 |
| message+:messages |
|
76 |
-> (let ((g (gensym 'pipe))) |
|
77 |
`(function (method ((bind ,g)) ,(fold (lambda (msg rcvr) (msg rcvr)) |
|
78 |
`(ref ,g) |
|
79 |
messages)))) |
|
80 |
; |
|
81 |
||
82 |
message = |
|
83 |
parse:p -> (lambda (rcvr) `(send ,rcvr ,p)) |
|
84 |
| pipe parse:p -> (lambda (msg) `(send ,p ,msg)) |
|
85 |
; |
|
86 |
||
87 |
send = |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
88 |
parse:receiver message*:messages |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
89 |
-> (fold (lambda (msg rcvr) `(send ,rcvr ,msg)) receiver messages) |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
90 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
91 |
|
212
4dc299259002
Be more thorough about detecting misplaced -> and =.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
209
diff
changeset
|
92 |
message = parse; |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
93 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
94 |
methods = |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
95 |
normal-method:m semis methods:ms -> (cons m ms) |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
96 |
| constant-method:m semis methods:ms -> (cons m ms) |
202
65694ce5407c
Make (discard) like all other pattern ASTs: wrapped in parens.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
201
diff
changeset
|
97 |
| &_ expr:e semis ~_ -> (list `(method ((discard)) ,e)) |
198
072745b48add
Improve parser to the point where metaeval.tng at least parses.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
186
diff
changeset
|
98 |
| semis ~_ -> '() |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
99 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
100 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
101 |
normal-method = |
201
9b22b7a23e39
Convert constant-methods to normal methods.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
198
diff
changeset
|
102 |
(~&(arrow | equal) pattern)+:patterns arrow expr:body |
9b22b7a23e39
Convert constant-methods to normal methods.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
198
diff
changeset
|
103 |
-> `(method ,patterns ,body) |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
104 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
105 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
106 |
constant-method = |
201
9b22b7a23e39
Convert constant-methods to normal methods.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
198
diff
changeset
|
107 |
(~&(arrow | equal) pattern)+:patterns equal expr:body |
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
108 |
-> `(constant-method ,patterns ,body) |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
109 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
110 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
111 |
pattern = pattern-tuple-nonempty:elts -> (if (= (length elts) 1) (car elts) `(tuple ,@elts)); |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
112 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
113 |
pattern-tuple-nonempty = |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
114 |
pattern-element:e (comma pattern-element)*:es |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
115 |
-> (cons e es) |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
116 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
117 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
118 |
pattern-tuple = pattern | -> `(tuple); |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
119 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
120 |
pattern-element = |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
121 |
~(#do | #let) |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
122 |
:n |
203
580fc03b9e18
Take advantage of the corrected ometa sequence behaviour.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
202
diff
changeset
|
123 |
( pattern-grouping(n) |
202
65694ce5407c
Make (discard) like all other pattern ASTs: wrapped in parens.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
201
diff
changeset
|
124 |
| ?(eq? n DISCARD) -> `(discard) |
198
072745b48add
Improve parser to the point where metaeval.tng at least parses.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
186
diff
changeset
|
125 |
| ?(qname-or-symbol? n) -> `(bind ,n) |
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
126 |
| ?(or (string? n) (number? n)) -> `(lit ,n) |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
127 |
) |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
128 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
129 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
130 |
pattern-grouping = |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
131 |
{#paren quote :n -> `(lit ,n)} |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
132 |
| {#paren pattern-tuple:p ~_ -> p} |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
133 |
| {#brace -> (error 'object-matching-not-supported)} |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
134 |
| {#brack -> (error 'function-matching-not-supported)} |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
135 |
; |
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
136 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
137 |
semis = (:x ?(eq? x SEMI))*; |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
138 |
semi = :x ?(eq? x SEMI) -> x; |
181
f82ec080be39
etng-r2, using ometa-scheme.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
diff
changeset
|
139 |
|
186
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
140 |
quote = :x ?(equal? x QUOTE-QNAME) -> x; |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
141 |
comma = :x ?(eq? x COMMA) -> x; |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
142 |
arrow = :x ?(eq? x ARROW) -> x; |
9426a54b733b
Update grammars for new ometa-scheme syntax.
Tony Garnock-Jones <tonyg@kcbbs.gen.nz>
parents:
184
diff
changeset
|
143 |
equal = :x ?(eq? x '=) -> x; |
230 | 144 |
pipe = :x ?(eq? x PIPE) -> x; |