home *** CD-ROM | disk | FTP | other *** search
/ Online Today 2000 January / Onto0100.iso / pc / JAVA / MSJAVX86.EXE / xmldso.cab / XML4IE3.cab / com / ms / xml / parser / Sequence.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-10-10  |  1.4 KB  |  83 lines

  1. package com.ms.xml.parser;
  2.  
  3. import com.ms.xml.util.Name;
  4. import com.ms.xml.util.XMLOutputStream;
  5. import java.io.IOException;
  6. import java.util.BitSet;
  7.  
  8. class Sequence extends Node {
  9.    Node left;
  10.    Node right;
  11.  
  12.    BitSet firstpos(int var1) {
  13.       if (super.first == null) {
  14.          if (this.left.nullable()) {
  15.             super.first = (BitSet)this.left.firstpos(var1).clone();
  16.             super.first.or(this.right.firstpos(var1));
  17.          } else {
  18.             super.first = this.left.firstpos(var1);
  19.          }
  20.       }
  21.  
  22.       return super.first;
  23.    }
  24.  
  25.    BitSet lastpos(int var1) {
  26.       if (super.last == null) {
  27.          if (this.right.nullable()) {
  28.             super.last = (BitSet)this.left.lastpos(var1).clone();
  29.             super.last.or(this.right.lastpos(var1));
  30.          } else {
  31.             super.last = this.right.lastpos(var1);
  32.          }
  33.       }
  34.  
  35.       return super.last;
  36.    }
  37.  
  38.    void save(XMLOutputStream var1, int var2, int var3, Name var4) throws IOException {
  39.       ++var3;
  40.       if (var2 == 44) {
  41.          this.left.save(var1, 44, var3, var4);
  42.          var1.write(44);
  43.          this.right.save(var1, 44, var3, var4);
  44.       } else {
  45.          var1.write(40);
  46.          this.left.save(var1, 44, var3, var4);
  47.          var1.write(44);
  48.          this.right.save(var1, 44, var3, var4);
  49.          var1.write(41);
  50.       }
  51.  
  52.       --var3;
  53.    }
  54.  
  55.    Sequence(Node var1, Node var2) {
  56.       this.left = var1;
  57.       this.right = var2;
  58.    }
  59.  
  60.    Node clone(ContentModel var1) {
  61.       return new Sequence(this.left.clone(var1), this.right.clone(var1));
  62.    }
  63.  
  64.    void calcfollowpos(BitSet[] var1) {
  65.       this.left.calcfollowpos(var1);
  66.       this.right.calcfollowpos(var1);
  67.       int var2 = var1.length;
  68.       BitSet var3 = this.left.lastpos(var2);
  69.       BitSet var4 = this.right.firstpos(var2);
  70.  
  71.       for(int var5 = var1.length - 1; var5 >= 0; --var5) {
  72.          if (var3.get(var5)) {
  73.             var1[var5].or(var4);
  74.          }
  75.       }
  76.  
  77.    }
  78.  
  79.    boolean nullable() {
  80.       return this.left.nullable() && this.right.nullable();
  81.    }
  82. }
  83.