new draft
Taylor Campbell
(27 Feb 2005 19:46 UTC)
|
Re: new draft
Paul Schlie
(28 Feb 2005 01:29 UTC)
|
Re: new draft
Taylor Campbell
(13 Mar 2005 20:44 UTC)
|
Re: new draft Paul Schlie (14 Mar 2005 07:46 UTC)
|
Re: new draft Paul Schlie 14 Mar 2005 07:46 UTC
To begin with, I apologize for an over zealous response after misreading your revised proposal; which I misinterpreted as formalizing the treatment of sequential #;'s non-recursively (i.e. (#; #; a b c) -> (c)), which you've actually denoted as an error, which much better than not; but please let me try to propose a potentially somewhat simpler and cleaner similar approach. - It may be simplest to define comment's grammar to be fully consistent with the language's existing reader abbreviations who's scope is consistently bounded by the subsequent fully recursively parsed <S-EXP>. (very similar to your revised proposal, but without any recursive limit) Thereby: using {} to denote the lexical bound of reader command, which can't be determined until all subsequently encountered opened scopes are themselves delimited; first showing only reader quote abbreviations: input: '(''`(a ,@(list 1 2 3) b)) parsed: '{ ( '{ '{ `{ ( a ,@{ ( list 1 2 3 ) } b ) } } } ) } returns: (quote ( (quote (quote (qq (a (uqs (list 1 2 3)) b))))) Correspondingly, if comment (quote-comment for the sake of argument), were given the exact same recursive <s-exp> grammar scoping rules, the only difference would be that rather than using it's immediately following recursively parsed <s-exp> as it's argument, it removes it and itself from the parsed expression (i.e commented out): input: '(#;#;a b `#;,c d #;'e) parsed: '{ ( #;{ #;{ a } } b `{ #;{ ,{ c } } } d #;{ '{ e } } ) returns: (quote (b d)) Thereby things seem nice simple and symmetric; and to make things more ideally consistent, just as it's clear that commenting a quote expression effectively removes it, quoting an comment expression should be considered equivalent; thereby all quote forms (including quote-comment), return nothing if they have no/empty arguments (i.e. r5rs grammar "empty"). Thereby it basically falls out for free, that: (') -> ( '{ <empty> } ) => () As would: `(a ,b ,) -> '{(a ,{b} ,{ <empty> }) => (qq (a (uq b))) Thereby consistently eliminating otherwise needless nuisance errors for quotes with no arguments, which seems harmless, and would be consistent. Ultimately requiring only a few basic tweaks to scheme's grammar: #; [<s-exp>|<empty>] -> {comment [<s-exp>|<empty>]} => <empty> ['|`|,|,@] <empty> -> {quote/qq/uq/uqs <empty} => <empty> Where per r5rs, essentially <empty> is implied last in any list, or upon file/input termination (therefore should require no further tweaks). -paul-