[DFDL-WG] DFDL pointer & offset proposal

Steve Hanson smh at uk.ibm.com
Fri Jul 10 08:11:06 EDT 2020


I think 'indirect' in property names  should be 'indirection', so I will 
assume that in what follows. 

I am not happy with 'indirectionEmptyValue' or 'indirectionMissingValue'. 
Both 'empty' and 'missing' are concepts with well-defined meanings in 
DFDL. How about 'indirectionInactiveValue' or better 
'indirectionUnusedValue'?

My stab at an updated grammar below (changes in blue). There is no concept 
of an empty indirection value or a nil indirection value, so we don't need 
those clauses. 

I also think we can simplify the EnclosedElement construct (changes in red
)

Bradd I know you were struggling with how to link the target of the 
indirection into the main grammar, as it is dis-contiguous. I think we can 
achieve that by incorporating the target(s) into the Document as a whole. 
 
If we think that the concept of an indirection can only ever happen inside 
a complex type, then we could move IndirectionRep from 
SimpleElement/ComplexElement to EnclosedElement.

I don't think it is worth getting more specific with IndirectElement. 
Specifically, it has no LeadingAlignment or TrailingAlignment, but to 
reflect that requires duplicating most of the rest of the grammar. 

You have not disallowed lengthKind 'prefixed' for the 'indirectionType', 
so that is included in the grammar. 


Productions

Document =  DocumentElement IndirectElement*

DocumentElement = SimpleElement | ComplexElement

SimpleElement = SimpleLiteralNilElementRep | SimpleEmptyElementRep | 
                            SimpleNormalRep | IndirectionRep
SimpleEnclosedElement = SimpleElement | AbsentElementRep 

ComplexElement = ComplexLiteralNilElementRep | ComplexNormalRep | 
                               ComplexEmptyElementRep | IndirectionRep
ComplexEnclosedElement = ComplexElement | AbsentElementRep 

EnclosedElement = SimpleElement | ComplexElement | AbsentElementRep

IndirectElement = SimpleElement | ComplexElement


AbsentElementRep = Absent

IndirectionRep = IndirectionLeftFraming PrefixLength IndirectionContent 
                             IndirectionRightFraming

IndirectionLeftFraming = LeadingAlignment
IndirectionRightFraming = TrailingAlignment

IndirectionContent = LeftPadding [ IndirectionValue | 
IndirectionUnusedValue ] RightPadOrFill 

IndirectionValue = SimpleValue


SimpleEmptyElementRep =  EmptyElementLeftFraming EmptyElementRightFraming
ComplexEmptyElementRep =  EmptyElementLeftFraming EmptyElementRightFraming

EmptyElementLeftFraming = LeadingAlignment EmptyElementInitiator 
PrefixLength
EmptyElementRightFraming = EmptyElementTerminator TrailingAlignment

SimpleLiteralNilElementRep = NilElementLeftFraming [NilLiteralCharacters | 

                                                 NilElementLiteralContent] 
NilElementRightFraming
ComplexLiteralNilElementRep = NilElementLeftFraming NilLiteralValue 
NilElementRightFraming

NilElementLeftFraming = LeadingAlignment NilElementInitiator PrefixLength
NilElementRightFraming = NilElementTerminator TrailingAlignment

NilElementLiteralContent = LeftPadding  NilLiteralValue RightPadOrFill

SimpleNormalRep = LeftFraming PrefixLength SimpleContent RightFraming
ComplexNormalRep = LeftFraming PrefixLength ComplexContent ElementUnused
                                    RightFraming

LeftFraming = LeadingAlignment Initiator 
RightFraming = Terminator TrailingAlignment

PrefixLength = SimpleContent | PrefixPrefixLength SimpleContent
PrefixPrefixLength = SimpleContent 

SimpleContent =   LeftPadding [ NilLogicalValue | SimpleValue ] 
RightPadOrFill 

ComplexContent = Sequence | Choice 

Sequence =  LeftFraming SequenceContent RightFraming 
SequenceContent = [ PrefixSeparator  EnclosedContent [ Separator 
EnclosedContent ]* 
                                   PostfixSeparator ]

Choice = LeftFraming ChoiceContent RightFraming
ChoiceContent = [ EnclosedContent ] ChoiceUnused

EnclosedContent = [ EnclosedElement | Array | Sequence | Choice ]

Array = [ EnclosedElement [ Separator EnclosedElement ]*  [ Separator 
StopValue] ]

StopValue = SimpleElement

LeadingAlignment = LeadingSkip AlignmentFill
TrailingAlignment = TrailingSkip
RightPadOrFill = RightPadding | RightFill | RightPadding RightFill


Regards
 
Steve Hanson
IBM Hybrid Integration, Hursley, UK
Architect, IBM DFDL
Co-Chair, OGF DFDL Working Group
smh at uk.ibm.com
tel:+44-1962-815848
mob:+44-7717-378890
Note: I work Tuesday to Friday 



From:   Bradd Kadlecik/Poughkeepsie/IBM
To:     Steve Hanson/UK/IBM
Cc:     DFDL-WG <dfdl-wg at ogf.org>, "dfdl-wg" <dfdl-wg-bounces at ogf.org>, 
Mike Beckerle <mbeckerle.dfdl at gmail.com>
Date:   09/07/2020 15:09
Subject:        Re: [EXTERNAL] Re: [DFDL-WG] DFDL pointer & offset 
proposal


I have updated the document proposal with proposed DFDL grammar changes:




Regards,

Bradd Kadlecik
z/TPF Development


Phone: 1-845-433-1573
E-mail: braddk at us.ibm.com
2455 South Rd
Poughkeepsie, NY 12601-5400
United States



Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ogf.org/pipermail/dfdl-wg/attachments/20200710/3cec7ac6/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: DFDL_Indirection_v3.docx
Type: application/octet-stream
Size: 28098 bytes
Desc: not available
URL: <http://www.ogf.org/pipermail/dfdl-wg/attachments/20200710/3cec7ac6/attachment-0001.obj>


More information about the dfdl-wg mailing list