smalltalk-tng
view etng-r2/etng-reader.g @ 321:c4a0718c2d3c
Sketch of dependencies
| author | Tony Garnock-Jones <tonygarnockjones@gmail.com> |
|---|---|
| date | Sat Oct 08 15:36:03 2011 -0400 (7 months ago) |
| parents | 9426a54b733b |
| children |
line source
1 -- -*- text -*-
3 sexp-toplevel = (ws $;)* ( (~toplevel-stop sexp)*:ss toplevel-stop -> ss
4 | ws ~_ -> 'eof);
6 toplevel-stop = ws $; ;
8 sexp =
9 ws ( $. sexp:s -> `(paren ,QUOTE-QNAME ,s)
10 | $` sexp:s -> `(paren ,UNQUOTE-QNAME ,s)
11 | $( sexp*:ss ws $) -> `(paren ,@ss)
12 | $[ sexp*:ss ws $] -> `(brack ,@ss)
13 | ${ sexp*:ss ws $} -> `(brace ,@ss)
14 )
15 | leaf
16 ;
18 leaf = qname | id | word | string;
20 qname =
21 id:lhs $: id:rhs -> (make-qname lhs rhs)
22 | ws $: id:rhs -> (make-qname EMPTY-SYMBOL rhs)
23 ;
25 id =
26 ws ( id1:i -> (string->symbol (string-concatenate (list-interleave "'" i)))
27 | $; -> (string->symbol ";")
28 | $, -> (string->symbol ",")
29 | id-alpha:a (id-alpha | digit)*:r
30 -> (string->symbol (list->string (cons a r)))
31 | id-punct+:p -> (string->symbol (list->string p))
32 )
33 ;
35 id1 =
36 id-subunit:i id1:is -> (cons i is)
37 | id-subunit:i -> (list i)
38 ;
40 id-subunit = $' (:c ?(not (eqv? c #\')) ->c)*:cs $' -> (list->string cs);
42 word = positive-word | ws $- positive-word:w -> (invert-sign w);
44 positive-word = ws digit+:d -> (string->number (list->string d));
46 string = ws string1:s -> (string-concatenate (list-interleave "\"" s));
48 string1 =
49 string-subunit:s string1:ss -> (cons s ss)
50 | string-subunit:s -> (list s)
51 ;
53 string-subunit = $" (:c ?(not (eqv? c #\")) ->c)*:cs $" -> (list->string cs);
55 id-alpha = :c ?(char-etng-id-alpha? c) -> c;
56 id-punct = :c ?(char-etng-id-punct? c) -> c;
57 digit = :c ?(char-numeric? c) -> c;
59 ws =
60 (:c ?(char-whitespace? c))+ ws
61 | $- $- (:c ?(not (eol-char? c)))*
62 (:c ?(eol-char? c))
63 ws
64 |
65 ;
