mbeckerle commented on a change in pull request #262: Unordered sequences
URL: https://github.com/apache/incubator-daffodil/pull/262#discussion_r320357505
##########
File path:
daffodil-core/src/main/scala/org/apache/daffodil/grammar/primitives/SequenceCombinator.scala
##########
@@ -76,3 +78,63 @@ class OrderedSequence(sq: SequenceTermBase,
sequenceChildrenArg: Seq[SequenceChi
}
}
}
+
+class UnorderedSequence(sq: SequenceTermBase, sequenceChildrenArg:
Seq[SequenceChild], alternatives: Seq[Gram])
+ extends SequenceCombinator(sq, sequenceChildrenArg) {
+
+ private lazy val sepGram = sq.sequenceSeparator
+ private lazy val sepParser = sepGram.parser
+ private lazy val sepUnparser = sepGram.unparser
+
+ private lazy val sequenceChildren = sequenceChildrenArg.toVector
+
+
+ private lazy val parsers = {
+ val res = alternatives.map { alt =>
+ val p = alt.parser
+ val res =
+ if (p.isEmpty)
+ new EmptyChoiceBranchParser(alt.context.runtimeData)
+ else
+ p
+ res
+ }
+ res
+ }
+
+
+ override lazy val parser: Parser = sq.hasSeparator match {
+ case true => {
+ lazy val choiceParser = new ChoiceParser(srd, sepParser +:
parsers.toVector)
Review comment:
I agree with steve that this isn't correct. The choice parser should not
include the separator. because below you are passing the sepParser and the
choiceParser as two different args to UnorderedSeparatedSequenceParser. That
should orchestrate finding the sep with the sepParser when it is expected.
Tests that would trip this up would be using
dfdl:separatorPosition="postfix" I think, because with the sep parser as part
of the choice parser, you can't ever have a final sep without a choice child.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services