Exemplo n.º 1
0
        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);
        }
Exemplo n.º 3
0
 public abstract void Apply(CstTransition cstTransition);