Repository URL to install this package:
|
Version:
2023.12.1 ▾
|
/* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
* Use of this file is governed by the BSD 3-clause license that
* can be found in the LICENSE.txt file in the project root.
*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Antlr4.Runtime.Misc;
using Antlr4.Runtime.Sharpen;
namespace Antlr4.Runtime.Atn
{
public abstract class ATNState
{
public const int InitialNumTransitions = 4;
public static readonly ReadOnlyCollection<string> serializationNames = new ReadOnlyCollection<string>(Arrays.AsList("INVALID", "BASIC", "RULE_START", "BLOCK_START", "PLUS_BLOCK_START", "STAR_BLOCK_START", "TOKEN_START", "RULE_STOP", "BLOCK_END", "STAR_LOOP_BACK", "STAR_LOOP_ENTRY", "PLUS_LOOP_BACK", "LOOP_END"));
public const int InvalidStateNumber = -1;
public ATN atn = null;
public int stateNumber = InvalidStateNumber;
public int ruleIndex;
public bool epsilonOnlyTransitions = false;
protected internal readonly List<Transition> transitions = new List<Transition>(InitialNumTransitions);
protected internal List<Transition> optimizedTransitions;
public IntervalSet nextTokenWithinRule;
public virtual int NonStopStateNumber
{
get
{
return stateNumber;
}
}
public override int GetHashCode()
{
return stateNumber;
}
public override bool Equals(object o)
{
return o==this ||
(o is ATNState && stateNumber == ((ATNState)o).stateNumber);
}
public virtual bool IsNonGreedyExitState
{
get
{
return false;
}
}
public override string ToString()
{
return stateNumber.ToString();
}
public virtual Transition[] TransitionsArray
{
get
{
return transitions.ToArray();
}
}
public virtual int NumberOfTransitions
{
get
{
return transitions.Count;
}
}
public virtual void AddTransition(Antlr4.Runtime.Atn.Transition e)
{
AddTransition(transitions.Count, e);
}
public virtual void AddTransition(int index, Antlr4.Runtime.Atn.Transition e)
{
if (transitions.Count == 0)
{
epsilonOnlyTransitions = e.IsEpsilon;
}
else
{
if (epsilonOnlyTransitions != e.IsEpsilon)
{
System.Console.Error.WriteLine("ATN state {0} has both epsilon and non-epsilon transitions.", stateNumber);
epsilonOnlyTransitions = false;
}
}
transitions.Insert(index, e);
}
public virtual Antlr4.Runtime.Atn.Transition Transition(int i)
{
return transitions[i];
}
public virtual void SetTransition(int i, Antlr4.Runtime.Atn.Transition e)
{
transitions[i] = e;
}
public virtual void RemoveTransition(int index)
{
transitions.RemoveAt(index);
}
public abstract Antlr4.Runtime.Atn.StateType StateType
{
get;
}
public bool OnlyHasEpsilonTransitions
{
get
{
return epsilonOnlyTransitions;
}
}
public virtual void SetRuleIndex(int ruleIndex)
{
this.ruleIndex = ruleIndex;
}
public virtual bool IsOptimized
{
get
{
return optimizedTransitions != transitions;
}
}
public virtual int NumberOfOptimizedTransitions
{
get
{
return optimizedTransitions.Count;
}
}
public virtual Antlr4.Runtime.Atn.Transition GetOptimizedTransition(int i)
{
return optimizedTransitions[i];
}
public virtual void AddOptimizedTransition(Antlr4.Runtime.Atn.Transition e)
{
if (!IsOptimized)
{
optimizedTransitions = new List<Antlr4.Runtime.Atn.Transition>();
}
optimizedTransitions.Add(e);
}
public virtual void SetOptimizedTransition(int i, Antlr4.Runtime.Atn.Transition e)
{
if (!IsOptimized)
{
throw new InvalidOperationException();
}
optimizedTransitions[i] = e;
}
public virtual void RemoveOptimizedTransition(int i)
{
if (!IsOptimized)
{
throw new InvalidOperationException();
}
optimizedTransitions.RemoveAt(i);
}
public ATNState()
{
optimizedTransitions = transitions;
}
}
}