From: Clark C. E. <cc...@cl...> - 2004-09-21 22:38:18
|
Oren, As I'm implementing, I'm thinking about how to update the spec [1] to reflect new understanding and also clean things up some. What do you think of, l-yaml-stream ::= l-document-prefix l-implicit-document? l-document-suffix? ( l-document-prefix l-stream-declaration l-explicit-document l-document-suffix? )* where: - we remove refrences to the document-prefix in the two *-document productions - l-stream-declaration is a series of %decls and comments Best, Clark [1] http://yaml.org/spec/spec.html cvs :ext:or...@cv...:/cvsroot/yaml co spec Relevant productions, [212] l-document-prefix ::= c-byte-order-mark? l-comment* [219] l-yaml-stream ::= ( l-document-prefix | ( l-implicit-document? l-explicit-document* ) ) <EOF> [217] l-implicit-document ::= l-document-prefix? /* implicit "---?" header line */ s-discarded-spaces? ( c-ns-directive s-seperate-spaces(0,block-out) )* ns-l-block-node(0,block-out) l-document-suffix? [218] l-explicit-document ::= l-document-prefix? c-document-start ( s-seperate-spaces(0,block-out) c-ns-directive )* ( ( s-seperate-spaces(0,block-out) ns-l-block-node(0,block-out) ) | s-l-empty-node ) l-document-suffix? [219] l-yaml-stream ::= ( l-document-prefix | ( l-implicit-document? l-explicit-document* ) ) <EOF> [213] c-document-start ::= ?-? ?-? ?-? [214] c-document-end ::= ?.? ?.? ?.? [215] l-document-suffix ::= c-document-end s-b-seperated-comment l-comment* -- Clark C. Evans Prometheus Research, LLC. http://www.prometheusresearch.com/ o office: +1.203.777.2550 ~/ , mobile: +1.203.444.0557 // (( Prometheus Research: Transforming Data Into Knowledge \\ , \/ - Research Exchange Database /\ - Survey & Assessment Technologies ` \ - Software Tools for Researchers ~ * |
From: Clark C. E. <cc...@cl...> - 2004-09-22 01:01:10
|
Ok, production requirements: - allowing at most one BOM (current spec allows two) - explicit stream does _not_ have a document "..." terminator, if you want one, use an explicit document - implicit stream does allow for leading comments and the optional BOM l-yaml-stream ::= (l-document-prefix # BOM + comments l-implicit-document)? (l-document-prefix # BOM + comments l-stream-declaration # %TAGs + comments l-explicit-document # --- (stuff) l-document-suffix? # ... )* It's still indeterminant at the document prefix level, but that's OK. Clark On Tue, Sep 21, 2004 at 06:38:11PM -0400, Clark C. Evans wrote: | Oren, | | As I'm implementing, I'm thinking about how to update the spec [1] | to reflect new understanding and also clean things up some. What do | you think of, | | l-yaml-stream ::= l-document-prefix | l-implicit-document? | l-document-suffix? | ( l-document-prefix | l-stream-declaration | l-explicit-document | l-document-suffix? )* | | where: | | - we remove refrences to the document-prefix in the | two *-document productions | | - l-stream-declaration is a series of %decls | and comments | | Best, | | Clark | | | [1] http://yaml.org/spec/spec.html | cvs :ext:or...@cv...:/cvsroot/yaml co spec | | Relevant productions, | | [212] l-document-prefix ::= c-byte-order-mark? | l-comment* | | [219] l-yaml-stream ::= ( l-document-prefix | | ( l-implicit-document? | l-explicit-document* ) ) | <EOF> | | [217] l-implicit-document ::= l-document-prefix? | /* implicit "---?" header line */ | s-discarded-spaces? | ( c-ns-directive | s-seperate-spaces(0,block-out) )* | ns-l-block-node(0,block-out) | l-document-suffix? | [218] l-explicit-document ::= l-document-prefix? | c-document-start | ( s-seperate-spaces(0,block-out) | c-ns-directive )* | ( ( s-seperate-spaces(0,block-out) | ns-l-block-node(0,block-out) ) | | s-l-empty-node ) | l-document-suffix? | | [219] l-yaml-stream ::= ( l-document-prefix | | ( l-implicit-document? | l-explicit-document* ) ) | <EOF> | | [213] c-document-start ::= ?-? ?-? ?-? | [214] c-document-end ::= ?.? ?.? ?.? | [215] l-document-suffix ::= c-document-end | s-b-seperated-comment | l-comment* | | | | | -- | Clark C. Evans Prometheus Research, LLC. | http://www.prometheusresearch.com/ | o office: +1.203.777.2550 | ~/ , mobile: +1.203.444.0557 | // | (( Prometheus Research: Transforming Data Into Knowledge | \\ , | \/ - Research Exchange Database | /\ - Survey & Assessment Technologies | ` \ - Software Tools for Researchers | ~ * | | | ------------------------------------------------------- | This SF.Net email is sponsored by: YOU BE THE JUDGE. Be one of 170 | Project Admins to receive an Apple iPod Mini FREE for your judgement on | who ports your project to Linux PPC the best. Sponsored by IBM. | Deadline: Sept. 24. Go here: http://sf.net/ppc_contest.php | _______________________________________________ | Yaml-core mailing list | Yam...@li... | https://lists.sourceforge.net/lists/listinfo/yaml-core | -- Clark C. Evans Prometheus Research, LLC. http://www.prometheusresearch.com/ o office: +1.203.777.2550 ~/ , mobile: +1.203.444.0557 // (( Prometheus Research: Transforming Data Into Knowledge \\ , \/ - Research Exchange Database /\ - Survey & Assessment Technologies ` \ - Software Tools for Researchers ~ * |
From: Oren Ben-K. <or...@be...> - 2004-09-22 05:19:56
|
On Wednesday 22 September 2004 03:01, Clark C. Evans wrote: > Ok, production requirements: > - allowing at most one BOM (current spec allows two) How? > - explicit stream does _not_ have a document "..." terminator, > if you want one, use an explicit document I don't understand... What's an explicit "stream"? Did you mean "implicit document"? If so, I'd say that the existence of '...' is independent of the existence of '---'. > - implicit stream does allow for leading comments and > the optional BOM Sure. > l-yaml-stream ::= (l-document-prefix # BOM + comments > l-implicit-document)? > (l-document-prefix # BOM + comments > l-stream-declaration # %TAGs + comments > l-explicit-document # --- (stuff) > l-document-suffix? # ... > )* Nope, its possible to have a single prologue and multiple documents following it. There are two alternatives: 1. The directives are seen as an (optional) part of each document; if missing, it reuses the previous document's directives (or, if first, the default directives). So, there's one BOM that appears at the start of the prologue and there is never a second BOM at the start of the explicit document following it. In this case, the simplest fix is to add l-directives just before l-document-start in the l-explicit-document production. That's it. 2. The directives are seen as an independent syntactical entity. Since a stream may start with directives, they must allow for an initial BOM. In addition, each document must allow for a BOM as well (since a stream may also start with a document without a directives section). Therefore, it is possible that a stream would contain both a BOM before the directives prologue and a BOM before the first explicit document following them. In this case, we'll need to do something like that: l-yaml-stream ::= l-throwaway-prefix | ( l-without-prologue l-with-prologue* ) l-without-prologue ::= l-implicit-document? l-explicit-document* l-with-prologue ::= l-stream-prologue l-explicit-document+ l-stream-prologue ::= l-throwaway-prefix ( l-directive l-comment(any)* )+ Where l-implicit-document and l-explicit document are as today (well, minus the directives of course). In this case we rename l-document-prefix to l-throwaway-prefix because it is used both for a document and for a prologue. At first glance, option 2 seems cleaner. However a we can't have two prologues following each other, there's no way to tell where one ends and the other begins. So a prologue isn't "really" a seperate syntactical entity. If it *must* be followed by an explicit document, perhaps it is cleanest to view it as part of its header after all (that is, option 1). Thoughts? Have fun, Oren Ben-Kiki P.S. All the above (and the current spec's productions) are ambiguous for an empty stream. In all cases it means "no document here, move along", though. I'll try to see if I can defuse this anyway. Oren. |
From: Clark C. E. <cc...@cl...> - 2004-09-22 07:48:11
|
On Wed, Sep 22, 2004 at 07:19:51AM +0200, Oren Ben-Kiki wrote: | On Wednesday 22 September 2004 03:01, Clark C. Evans wrote: | | > Ok, production requirements: | > - allowing at most one BOM (current spec allows two) | | How? ah, my bad -- I mis-read an alternation | 1. The directives are seen as an (optional) part of each document; if | missing, it reuses the previous document's directives (or, if first, | the default directives). So, there's one BOM that appears at the start | of the prologue and there is never a second BOM at the start of the | explicit document following it. *nod* | In this case, the simplest fix is to add l-directives just before | l-document-start in the l-explicit-document production. That's it. Sounds like a plan. | At first glance, option 2 seems cleaner. However a we can't have two | prologues following each other, there's no way to tell where one ends | and the other begins. So a prologue isn't "really" a seperate | syntactical entity. If it *must* be followed by an explicit document, | perhaps it is cleanest to view it as part of its header after all (that | is, option 1). Yes; the new prologue logic is a parsing rewrite rule, not a lexing production. | P.S. All the above (and the current spec's productions) are ambiguous | for an empty stream. In all cases it means "no document here, move | along", though. I'll try to see if I can defuse this anyway. I didn't have a problem with that. Best, Clark P.S. The "pull" parser is coming along nicely. The productions you have worked so hard on are damn flawless so far. I'm trying to keep the implementation with a very close 1-1 relationship with the specification. |