@@ -4,40 +4,37 @@ import org.srcgll.rsm.symbol.Nonterminal
4
4
import org.srcgll.rsm.symbol.Terminal
5
5
6
6
class 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 ()
18
17
19
18
override fun toString () =
20
19
" RSMState(id=$id , nonterminal=$nonterminal , isStart=$isStart , isFinal=$isFinal )"
21
20
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
25
23
if (other !is RSMState ) return false
26
- if (id != other.id) return false
24
+ if (id != other.id) return false
27
25
28
26
return true
29
27
}
30
28
31
- val hashCode : Int = id
29
+ val hashCode: Int = id
32
30
override fun hashCode () = hashCode
33
31
34
- fun addTerminalEdge (edge : RSMTerminalEdge )
35
- {
32
+ fun addTerminalEdge (edge : RSMTerminalEdge ) {
36
33
if (! coveredTargetStates.contains(edge.head)) {
37
34
errorRecoveryLabels.add(edge.terminal)
38
35
coveredTargetStates.add(edge.head)
39
36
}
40
-
37
+
41
38
if (outgoingTerminalEdges.containsKey(edge.terminal)) {
42
39
val targetStates = outgoingTerminalEdges.getValue(edge.terminal)
43
40
@@ -47,8 +44,7 @@ class RSMState
47
44
}
48
45
}
49
46
50
- fun addNonterminalEdge (edge : RSMNonterminalEdge )
51
- {
47
+ fun addNonterminalEdge (edge : RSMNonterminalEdge ) {
52
48
if (outgoingNonterminalEdges.containsKey(edge.nonterminal)) {
53
49
val targetStates = outgoingNonterminalEdges.getValue(edge.nonterminal)
54
50
@@ -57,4 +53,14 @@ class RSMState
57
53
outgoingNonterminalEdges[edge.nonterminal] = hashSetOf(edge.head)
58
54
}
59
55
}
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
+ }
60
66
}
0 commit comments