Ejemplo n.º 1
0
 internal static void PostOrderWalk(Expansion node, ITreeWalkerOp opObj)
 {
     if (opObj.GoDeeper(node)) {
         if (node is Choice) {
             foreach (var choice in ((Choice)node).Choices) {
                 PostOrderWalk(choice, opObj);
             }
         } else if (node is Sequence) {
             foreach (var unit in ((Sequence)node).Units) {
                 PostOrderWalk(unit, opObj);
             }
         } else if (node is OneOrMore) {
             PostOrderWalk(((OneOrMore) node).Expansion, opObj);
         } else if (node is ZeroOrMore) {
             PostOrderWalk(((ZeroOrMore) node).Expansion, opObj);
         } else if (node is ZeroOrOne) {
             PostOrderWalk(((ZeroOrOne) node).Expansion, opObj);
         } else if (node is Lookahead) {
             Expansion nestedE = ((Lookahead) node).Expansion;
             if (!(nestedE is Sequence && ((Sequence) nestedE).Units[0] == node)) {
                 PostOrderWalk(nestedE, opObj);
             }
         } else if (node is TryBlock) {
             PostOrderWalk(((TryBlock) node).Expansion, opObj);
         } else if (node is RChoice) {
             foreach (var choice in ((RChoice)node).Choices) {
                 PostOrderWalk(choice, opObj);
             }
         } else if (node is RSequence) {
             foreach (var unit in ((RSequence)node).Units) {
                 PostOrderWalk(unit, opObj);
             }
         } else if (node is ROneOrMore) {
             PostOrderWalk(((ROneOrMore) node).RegularExpression, opObj);
         } else if (node is RZeroOrMore) {
             PostOrderWalk(((RZeroOrMore) node).RegularExpression, opObj);
         } else if (node is RZeroOrOne) {
             PostOrderWalk(((RZeroOrOne) node).RegularExpression, opObj);
         } else if (node is RRepetitionRange) {
             PostOrderWalk(((RRepetitionRange) node).RegularExpression, opObj);
         }
     }
     opObj.Action(node);
 }
Ejemplo n.º 2
0
 internal static void PostOrderWalk(Expansion node, ITreeWalkerOp opObj)
 {
     if (opObj.GoDeeper(node))
     {
         if (node is Choice)
         {
             foreach (var choice in ((Choice)node).Choices)
             {
                 PostOrderWalk(choice, opObj);
             }
         }
         else if (node is Sequence)
         {
             foreach (var unit in ((Sequence)node).Units)
             {
                 PostOrderWalk(unit, opObj);
             }
         }
         else if (node is OneOrMore)
         {
             PostOrderWalk(((OneOrMore)node).Expansion, opObj);
         }
         else if (node is ZeroOrMore)
         {
             PostOrderWalk(((ZeroOrMore)node).Expansion, opObj);
         }
         else if (node is ZeroOrOne)
         {
             PostOrderWalk(((ZeroOrOne)node).Expansion, opObj);
         }
         else if (node is Lookahead)
         {
             Expansion nestedE = ((Lookahead)node).Expansion;
             if (!(nestedE is Sequence && ((Sequence)nestedE).Units[0] == node))
             {
                 PostOrderWalk(nestedE, opObj);
             }
         }
         else if (node is TryBlock)
         {
             PostOrderWalk(((TryBlock)node).Expansion, opObj);
         }
         else if (node is RChoice)
         {
             foreach (var choice in ((RChoice)node).Choices)
             {
                 PostOrderWalk(choice, opObj);
             }
         }
         else if (node is RSequence)
         {
             foreach (var unit in ((RSequence)node).Units)
             {
                 PostOrderWalk(unit, opObj);
             }
         }
         else if (node is ROneOrMore)
         {
             PostOrderWalk(((ROneOrMore)node).RegularExpression, opObj);
         }
         else if (node is RZeroOrMore)
         {
             PostOrderWalk(((RZeroOrMore)node).RegularExpression, opObj);
         }
         else if (node is RZeroOrOne)
         {
             PostOrderWalk(((RZeroOrOne)node).RegularExpression, opObj);
         }
         else if (node is RRepetitionRange)
         {
             PostOrderWalk(((RRepetitionRange)node).RegularExpression, opObj);
         }
     }
     opObj.Action(node);
 }