Exemplo n.º 1
0
 private TreeNode ParseOr()
 {
     var head = ParseCat();
     while (PeekAndDiscard('|'))
     {
         var tail = ParseCat();
         head = new TreeNode
         {
             Type = NodeType.Or,
             Left = head,
             Right = tail,
         };
     }
     return head;
 }
Exemplo n.º 2
0
 public TreeNode Parse()
 {
     var head = ParseOr();
     if (PeekAndDiscard(']'))
     {
         Expect('[');
         var tail = ParseOr();
         head = new TreeNode
         {
             Type = NodeType.Cut,
             Left = head,
             Right = tail
         };
     }
     return head;
 }
Exemplo n.º 3
0
 private TreeNode ParseCat()
 {
     var prev = ParseFactor();
     for (; ; )
     {
         var tail = ParseFactor();
         if (tail == null)
             break;
         var node = new TreeNode
         {
             Type = NodeType.Cat,
             Left = prev,
             Right = tail
         };
         prev = node;
     }
     return prev;
 }