@@ -4,40 +4,37 @@ import org.srcgll.rsm.symbol.Nonterminal
44import org.srcgll.rsm.symbol.Terminal
55
66class RSMState
7- (
8- val id : Int ,
9- val nonterminal : Nonterminal ,
10- val isStart : Boolean = false ,
11- val isFinal : Boolean = false ,
12- )
13- {
14- val outgoingTerminalEdges : HashMap <Terminal <* >, HashSet <RSMState >> = HashMap ()
15- val outgoingNonterminalEdges : HashMap <Nonterminal , HashSet <RSMState >> = HashMap ()
16- val coveredTargetStates : HashSet <RSMState > = HashSet ()
17- val errorRecoveryLabels : HashSet <Terminal <* >> = HashSet ()
7+ (
8+ val id: Int ,
9+ val nonterminal: Nonterminal ,
10+ val isStart: Boolean = false ,
11+ val isFinal: Boolean = false ,
12+ ) {
13+ val outgoingTerminalEdges: HashMap <Terminal <* >, HashSet <RSMState >> = HashMap ()
14+ val outgoingNonterminalEdges: HashMap <Nonterminal , HashSet <RSMState >> = HashMap ()
15+ val coveredTargetStates: HashSet <RSMState > = HashSet ()
16+ val errorRecoveryLabels: HashSet <Terminal <* >> = HashSet ()
1817
1918 override fun toString () =
2019 " RSMState(id=$id , nonterminal=$nonterminal , isStart=$isStart , isFinal=$isFinal )"
2120
22- override fun equals (other : Any? ) : Boolean
23- {
24- if (this == = other) return true
21+ override fun equals (other : Any? ): Boolean {
22+ if (this == = other) return true
2523 if (other !is RSMState ) return false
26- if (id != other.id) return false
24+ if (id != other.id) return false
2725
2826 return true
2927 }
3028
31- val hashCode : Int = id
29+ val hashCode: Int = id
3230 override fun hashCode () = hashCode
3331
34- fun addTerminalEdge (edge : RSMTerminalEdge )
35- {
32+ fun addTerminalEdge (edge : RSMTerminalEdge ) {
3633 if (! coveredTargetStates.contains(edge.head)) {
3734 errorRecoveryLabels.add(edge.terminal)
3835 coveredTargetStates.add(edge.head)
3936 }
40-
37+
4138 if (outgoingTerminalEdges.containsKey(edge.terminal)) {
4239 val targetStates = outgoingTerminalEdges.getValue(edge.terminal)
4340
@@ -47,8 +44,7 @@ class RSMState
4744 }
4845 }
4946
50- fun addNonterminalEdge (edge : RSMNonterminalEdge )
51- {
47+ fun addNonterminalEdge (edge : RSMNonterminalEdge ) {
5248 if (outgoingNonterminalEdges.containsKey(edge.nonterminal)) {
5349 val targetStates = outgoingNonterminalEdges.getValue(edge.nonterminal)
5450
@@ -57,4 +53,14 @@ class RSMState
5753 outgoingNonterminalEdges[edge.nonterminal] = hashSetOf(edge.head)
5854 }
5955 }
56+
57+ fun rsmEquals (other : RSMState ): Boolean {
58+ if (this != other) {
59+ return false
60+ }
61+ if (outgoingTerminalEdges != other.outgoingTerminalEdges) {
62+ return false
63+ }
64+ return outgoingNonterminalEdges == other.outgoingNonterminalEdges
65+ }
6066}
0 commit comments