예제 #1
0
 public static ParserNode opt(ParserNode node)
 {
     return(new OptionalNode()
     {
         Content = node
     });
 }
예제 #2
0
 public static ParserNode leftrecg(ParserNode first, params LeftRecursionGroupNode.Group[] nexts)
 {
     return(new LeftRecursionGroupNode()
     {
         FirstNode = first,
         Groups = nexts.ToList()
     });
 }
예제 #3
0
 public static ParserNode list_hard <T>(ParserNode item)
 {
     return(new ListNode()
     {
         NodeType = typeof(T),
         Item = item,
         ContinueType = ListNodeContinueType.KeepGoing
     });
 }
예제 #4
0
 public static LeftRecursionGroupNode.Group g <T>(string member, ParserNode node)
     where T : CodeNode
 {
     return(new LeftRecursionGroupNode.Group()
     {
         FirstMember = member,
         NextNode = node,
         Type = typeof(T)
     });
 }
예제 #5
0
 public static ParserNode list <T>(ParserNode separator, ParserNode item)
 {
     return(new ListNode()
     {
         NodeType = typeof(T),
         Separator = separator,
         Item = item,
         ContinueType = ListNodeContinueType.CreateNodeType
     });
 }
예제 #6
0
 public static ParserNode list <T>(ParserNode item, params string[] finishTokens)
 {
     return(new ListNode()
     {
         NodeType = typeof(T),
         Item = item,
         FinishTokens = finishTokens,
         ContinueType = ListNodeContinueType.StopByFinishTokens
     });
 }
예제 #7
0
 public static ParserNode ret(ParserNode node)
 {
     if (node is RuleNode || node is TokenNode || node is TokenContentNode || node is LeftRecursionNode || node is LeftRecursionGroupNode || node is ListNode)
     {
         return(new ReturnNode()
         {
             Content = node
         });
     }
     else
     {
         throw new ArgumentException("Parser.ret can only be applied to rule, token, list or leftrec.");
     }
 }
예제 #8
0
 public static ParserNode leftrec <T>(ParserNode first, ParserNode next)
 {
     if (first is MemberNode)
     {
         return(new LeftRecursionNode()
         {
             First = first,
             Next = next,
             NodeType = typeof(T)
         });
     }
     else
     {
         throw new ArgumentException("The first argument for Parser.leftrec should be MemberNode.");
     }
 }
예제 #9
0
 public void Infer(ParserNode node)
 {
     this.Content = node;
 }