--- a/etng-r2/etng-reader.g Tue Jul 22 02:52:25 2008 +1200
+++ b/etng-r2/etng-reader.g Wed Dec 10 20:41:53 2008 +1300
@@ -1,69 +1,63 @@
-- -*- text -*-
-sexp-toplevel ::= (<(ws)> $;)* (~<(toplevel-stop)> <(sexp)>)*:ss <(toplevel-stop)> => ss;
-toplevel-stop ::= <(ws)> $; $; ;
+sexp-toplevel = (ws $;)* (~toplevel-stop sexp)*:ss toplevel-stop -> ss;
+toplevel-stop = ws $; $; ;
-sexp ::=
- <(ws)> ( $. <(sexp)>:s =>`(paren ,QUOTE-QNAME ,s)
- | $` <(sexp)>:s =>`(paren ,UNQUOTE-QNAME ,s)
- | $( <(sexp)>*:ss <(ws)> $) =>`(paren ,@ss)
- | $[ <(sexp)>*:ss <(ws)> $] =>`(brack ,@ss)
- | ${ <(sexp)>*:ss <(ws)> $} =>`(brace ,@ss)
- )
- | <(leaf)>
+sexp =
+ ws ( $. sexp:s -> `(paren ,QUOTE-QNAME ,s)
+ | $` sexp:s -> `(paren ,UNQUOTE-QNAME ,s)
+ | $( sexp*:ss ws $) -> `(paren ,@ss)
+ | $[ sexp*:ss ws $] -> `(brack ,@ss)
+ | ${ sexp*:ss ws $} -> `(brace ,@ss)
+ )
+ | leaf
;
-leaf ::= <(qname)> | <(id)> | <(word)> | <(string)>;
+leaf = qname | id | word | string;
-qname ::=
- <(id)>:lhs $: <(id)>:rhs =>(make-qname lhs rhs)
- | <(ws)> $: <(id)>:rhs =>(make-qname EMPTY-SYMBOL rhs)
+qname =
+ id:lhs $: id:rhs -> (make-qname lhs rhs)
+ | ws $: id:rhs -> (make-qname EMPTY-SYMBOL rhs)
;
-id ::=
- <(ws)> ( <(id1)>:i =>(string->symbol (string-concatenate (list-interleave "'" i)))
- | $; =>(string->symbol ";")
- | $, =>(string->symbol ",")
- | <(id-alpha)>:a (<(id-alpha)> | <(digit)>)*:r
- =>(string->symbol (list->string (cons a r)))
- | <(id-punct)>+:p =>(string->symbol (list->string p))
- )
+id =
+ ws ( id1:i -> (string->symbol (string-concatenate (list-interleave "'" i)))
+ | $; -> (string->symbol ";")
+ | $, -> (string->symbol ",")
+ | id-alpha:a (id-alpha | digit)*:r
+ -> (string->symbol (list->string (cons a r)))
+ | id-punct+:p -> (string->symbol (list->string p))
+ )
;
-id1 ::=
- <(id-subunit)>:i <(id1)>:is =>(cons i is)
- | <(id-subunit)>:i =>(list i)
-;
-
-id-subunit ::=
- $' (:c ?(not (eqv? c #\')) =>c)*:cs $'
- =>(list->string cs)
+id1 =
+ id-subunit:i id1:is -> (cons i is)
+ | id-subunit:i -> (list i)
;
-word ::= <(positive-word)> | <(ws)> $- <(positive-word)>:w =>(invert-sign w) ;
+id-subunit = $' (:c ?(not (eqv? c #\')) ->c)*:cs $' -> (list->string cs);
-positive-word ::= <(ws)> <(digit)>+:d =>(string->number (list->string d)) ;
+word = positive-word | ws $- positive-word:w -> (invert-sign w);
+
+positive-word = ws digit+:d -> (string->number (list->string d));
-string ::= <(ws)> <(string1)>:s =>(string-concatenate (list-interleave "\"" s)) ;
+string = ws string1:s -> (string-concatenate (list-interleave "\"" s));
-string1 ::=
- <(string-subunit)>:s <(string1)>:ss =>(cons s ss)
- | <(string-subunit)>:s =>(list s)
+string1 =
+ string-subunit:s string1:ss -> (cons s ss)
+ | string-subunit:s -> (list s)
;
-string-subunit ::=
- $" (:c ?(not (eqv? c #\")) =>c)*:cs $"
- =>(list->string cs)
-;
+string-subunit = $" (:c ?(not (eqv? c #\")) ->c)*:cs $" -> (list->string cs);
-id-alpha ::= :c ?(char-etng-id-alpha? c) =>c ;
-id-punct ::= :c ?(char-etng-id-punct? c) =>c ;
-digit ::= :c ?(char-numeric? c) => c;
+id-alpha = :c ?(char-etng-id-alpha? c) -> c;
+id-punct = :c ?(char-etng-id-punct? c) -> c;
+digit = :c ?(char-numeric? c) -> c;
-ws ::=
- (:c ?(char-whitespace? c))+ <(ws)>
+ws =
+ (:c ?(char-whitespace? c))+ ws
| $- $- (:c ?(not (eol-char? c)))*
(:c ?(eol-char? c))
- <(ws)>
+ ws
|
;