public override void Apply(CstTransition cstTransition) { var node = new DotNode(cstTransition.IdShort); if (cstTransition.IsEpsilon) { node.Attributes.Label = $"Transition[ε: {cstTransition.StartStateName.Name} ==> {cstTransition.EndStateName.Name}]"; _graph.Nodes.Add(node); cstTransition.StartStateName.Visit(this); cstTransition.EndStateName.Visit(this); _graph.Edges.Add(node.Id, cstTransition.StartStateName.IdShort); _graph.Edges.Add(node.Id, cstTransition.EndStateName.IdShort); } else { node.Attributes.Label = $"Transition[{cstTransition.StartStateName.Name} ==[{cstTransition.Token.Name}]=> {cstTransition.EndStateName.Name}]"; _graph.Nodes.Add(node); cstTransition.StartStateName.Visit(this); cstTransition.Token.Visit(this); cstTransition.EndStateName.Visit(this); _graph.Edges.Add(node.Id, cstTransition.StartStateName.IdShort); _graph.Edges.Add(node.Id, cstTransition.Token.IdShort); _graph.Edges.Add(node.Id, cstTransition.EndStateName.IdShort); } }
public override void Apply(CstTransition cstTransition) { var transitionOptions = new TransitionOptions(); if (cstTransition.IsEpsilon) { cstTransition.StartStateName.Visit(this); cstTransition.EndStateName.Visit(this); transitionOptions.IsEpsilon = true; transitionOptions.EndState = (string)_buffer.Pop(); transitionOptions.StartState = (string)_buffer.Pop(); } else { cstTransition.StartStateName.Visit(this); cstTransition.Token.Visit(this); cstTransition.EndStateName.Visit(this); transitionOptions.IsEpsilon = false; transitionOptions.EndState = (string)_buffer.Pop(); transitionOptions.Token = (string)_buffer.Pop(); transitionOptions.StartState = (string)_buffer.Pop(); } _buffer.Push(transitionOptions); }
public abstract void Apply(CstTransition cstTransition);