@@ -3,31 +3,36 @@ package eu.yeger.cyk.model
3
3
public data class Coordinates (val row : Int , val column : Int )
4
4
5
5
public sealed class CYKState {
6
- public abstract val cykModel: CYKModel
7
- }
6
+ public abstract val model: CYKModel
7
+
8
+ public data class Start (
9
+ public override val model : CYKModel ,
10
+ ) : CYKState()
8
11
9
- public data class CYKStart (
10
- public override val cykModel : CYKModel ,
11
- ) : CYKState()
12
+ public data class Step (
13
+ public override val model : CYKModel ,
14
+ public val productionRule : ProductionRule ,
15
+ public val productionRuleWasApplied : Boolean ,
16
+ public val sourceCoordinates : Coordinates ,
17
+ public val targetCoordinates : List <Coordinates >,
18
+ ) : CYKState()
12
19
13
- public data class CYKStep (
14
- public override val cykModel : CYKModel ,
15
- public val productionRule : ProductionRule ,
16
- public val ruleWasApplied : Boolean ,
17
- public val sourceCoordinates : Coordinates ,
18
- public val targetCoordinates : List <Coordinates >
19
- ) : CYKState()
20
+ public data class Done (
21
+ public override val model : CYKModel ,
22
+ public val wordIsMemberOfLanguage : Boolean ,
23
+ ) : CYKState()
24
+ }
20
25
21
26
internal fun CYKState.stepWithRuleAt (
22
27
productionRule : ProductionRule ,
23
28
rowIndex : Int ,
24
29
columnIndex : Int ,
25
30
targetCoordinates : List <Coordinates >,
26
- ): CYKStep {
27
- return CYKStep (
28
- cykModel = cykModel .withSymbolAt(productionRule.left, rowIndex = rowIndex, columnIndex = columnIndex),
31
+ ): CYKState . Step {
32
+ return CYKState . Step (
33
+ model = model .withSymbolAt(productionRule.left, rowIndex = rowIndex, columnIndex = columnIndex),
29
34
productionRule = productionRule,
30
- ruleWasApplied = true ,
35
+ productionRuleWasApplied = true ,
31
36
sourceCoordinates = Coordinates (rowIndex, columnIndex),
32
37
targetCoordinates = targetCoordinates,
33
38
)
@@ -38,12 +43,19 @@ internal fun CYKState.stepWithoutRuleAt(
38
43
rowIndex : Int ,
39
44
columnIndex : Int ,
40
45
targetCoordinates : List <Coordinates >,
41
- ): CYKStep {
42
- return CYKStep (
43
- cykModel = cykModel ,
46
+ ): CYKState . Step {
47
+ return CYKState . Step (
48
+ model = model ,
44
49
productionRule = productionRule,
45
- ruleWasApplied = false ,
50
+ productionRuleWasApplied = false ,
46
51
sourceCoordinates = Coordinates (rowIndex, columnIndex),
47
52
targetCoordinates = targetCoordinates,
48
53
)
49
54
}
55
+
56
+ internal fun CYKState.terminated (): CYKState .Done {
57
+ return CYKState .Done (
58
+ model = model,
59
+ wordIsMemberOfLanguage = model.result,
60
+ )
61
+ }
0 commit comments