public override EpsilonNfa Apply(AlternativeExpression expression, Automaton param) { var nfa = new EpsilonNfa(param); var a = Invoke(expression.Left, param); var b = Invoke(expression.Right, param); param.AddTransition(nfa.Start, a.Start, Transition.Type.Epsilon); param.AddTransition(nfa.Start, b.Start, Transition.Type.Epsilon); param.AddTransition(a.End, nfa.End, Transition.Type.Epsilon); param.AddTransition(b.End, nfa.End, Transition.Type.Epsilon); return(nfa); }
public Expression ParseAlternate() { var left = ParseJoin(); while(true) { if (_sourceWindow.AdvanceIfMatches('|')) { var right = ParseJoin(); if (right == null) { throw new ArgumentException("Expect expression after |."); } var seq = new AlternativeExpression(left, right); left = seq; } else break; } return left; }
public Expression ParseAlternate() { var left = ParseJoin(); while (true) { if (_sourceWindow.AdvanceIfMatches('|')) { var right = ParseJoin(); if (right == null) { throw new ArgumentException("Expect expression after |."); } var seq = new AlternativeExpression(left, right); left = seq; } else { break; } } return(left); }
public override Expression Apply(AlternativeExpression expression, MergeParameter param) { return(new AlternativeExpression( Invoke(expression.Left, param), Invoke(expression.Right, param))); }
public static RegexNode operator |(RegexNode node1, RegexNode node2) { var expression = new AlternativeExpression(node1.Exp, node2.Exp); return(new RegexNode(expression)); }
public bool Equals(AlternativeExpression obj) { return(Left.Equals(obj.Left) && Right.Equals(obj.Right)); }
public void Visit(AlternativeExpression expression) { _returnValue = this.Apply(expression, _paramValue); }
public abstract ReturnT Apply(AlternativeExpression expression, ParamT param);
public static RegexNode operator |(RegexNode node1,RegexNode node2) { var expression = new AlternativeExpression(node1.Exp, node2.Exp); return new RegexNode(expression); }
public bool Equals(AlternativeExpression obj) { return Left.Equals(obj.Left) && Right.Equals(obj.Right); }