Skip to content

Commit 8e2ffdf

Browse files
authored
Merge pull request #35 from javecs/feature/simple-expr
テンプレートを指定して簡易な回答を出力しました。
2 parents 0475592 + d097336 commit 8e2ffdf

10 files changed

Lines changed: 44 additions & 30 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ plugins {
1616
}
1717

1818
group 'xyz.javecs.tools'
19-
version '0.1.1'
19+
version '0.1.2'
2020

2121
apply plugin: 'kotlin'
2222
apply plugin: 'antlr'

src/main/kotlin/xyz/javecs/tools/text2expr/Text2Expr.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,25 @@ import xyz.javecs.tools.expr.Calculator
44
import xyz.javecs.tools.text2expr.parsers.RuleBuilder
55
import xyz.javecs.tools.text2expr.parsers.RuleRenderer
66
import xyz.javecs.tools.text2expr.parsers.Variable
7+
import xyz.javecs.tools.text2expr.utils.TemplateLoader
78
import xyz.javecs.tools.text2expr.utils.normalize
89
import xyz.javecs.tools.text2expr.utils.read
910
import xyz.javecs.tools.text2expr.utils.resources
1011

1112
class Text2Expr(rulePath: String = "rules") {
1213
private val rules = ArrayList<RuleBuilder>()
13-
private val calc = Calculator()
14-
private val renderer = RuleRenderer(read("templates/reply.st"))
14+
private val templates = TemplateLoader(defaultTemplate = read("templates/reply.st"))
1515

1616
init {
17-
resources(rulePath).forEach { rules.add(RuleBuilder(read(it))) }
17+
resources(rulePath).forEach { rules.add(RuleBuilder(source = read(it), name = it)) }
1818
}
1919

2020
fun eval(text: String, rendered: Boolean = false): String {
2121
rules.forEach {
2222
try {
2323
val evaluation = it.eval(text)
2424
if (evaluation.value != Double.NaN) return if (rendered) {
25+
val renderer = RuleRenderer(templates.templateOf(it.name))
2526
renderer.add("variables", evaluation.variables.map { Variable(it.key, it.value) }.toList())
2627
renderer.add("expr", evaluation.expr)
2728
renderer.add("text", text)
@@ -33,6 +34,6 @@ class Text2Expr(rulePath: String = "rules") {
3334
} catch (e: Exception) {
3435
}
3536
}
36-
return calc.eval(normalize(text)).value.toString()
37+
return Calculator().eval(normalize(text)).value.toString()
3738
}
3839
}

src/main/kotlin/xyz/javecs/tools/text2expr/parsers/RuleBuilder.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,8 @@ import xyz.javecs.tools.text2expr.utils.normalize
77

88
private val tokenizer = Tokenizer()
99
data class Evaluation(val value: Number = Double.NaN, val expr: List<String> = ArrayList(), val variables: Map<String, Double> = HashMap())
10-
class RuleBuilder(source: String) {
10+
class RuleBuilder(source: String, val name: String = "") {
1111
private val parser = RuleParser()
12-
1312
init {
1413
parser.visit(parser(source).text2expr())
1514
}

src/main/kotlin/xyz/javecs/tools/text2expr/utils/TemplateConfig.kt renamed to src/main/kotlin/xyz/javecs/tools/text2expr/utils/TemplateLoader.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import org.yaml.snakeyaml.Yaml
55
data class Templates(var templates: List<RuleTemplate> = ArrayList<RuleTemplate>())
66
data class RuleTemplate(var rule:String = "", var template:String = "")
77

8-
class TemplateConfig(path: String = "rule-template.yml", val defaultTemplate: String = "") {
8+
class TemplateLoader(path: String = "rule-template.yml", val defaultTemplate: String = "") {
99
private val config = Yaml().loadAs(read(path), Templates::class.java)
1010
fun templateOf(rule:String): String {
1111
val item = config.templates.find { it.rule == rule }
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
templates:
2-
- rule: default
3-
template: templates/reply.st
42
- rule: rules/length/mileToKilometer.txt
53
template: templates/simple-expr.st

src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/TemplateConfigTest.kt renamed to src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/TemplateLoaderTest.kt

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,42 @@
11
package xyz.javecs.tools.text2expr.test.kotlin
22

33
import org.junit.Test
4-
import xyz.javecs.tools.text2expr.utils.TemplateConfig
4+
import xyz.javecs.tools.text2expr.utils.TemplateLoader
55
import kotlin.test.assertEquals
66

7-
class TemplateConfigTest {
7+
class TemplateLoaderTest {
88
@Test fun template1() {
9-
val config = TemplateConfig("config/rule-template-test1.yml")
9+
val config = TemplateLoader("config/rule-template-test1.yml")
1010
assertEquals("HELLO", config.templateOf("hello"))
1111
assertEquals("", config.templateOf("world"))
1212

1313
}
1414

1515
@Test fun template2() {
16-
val config = TemplateConfig("config/rule-template-test2.yml")
16+
val config = TemplateLoader("config/rule-template-test2.yml")
1717
assertEquals("HELLO", config.templateOf("hello"))
1818
assertEquals("WORLD", config.templateOf("world"))
1919
}
2020

2121
@Test fun template3() {
22-
val config = TemplateConfig("config/rule-template-test2.yml")
22+
val config = TemplateLoader("config/rule-template-test2.yml")
2323
assertEquals("HELLO", config.templateOf("hello"))
2424
assertEquals("WORLD", config.templateOf("world"))
2525
}
2626

2727
@Test fun template4() {
28-
val config = TemplateConfig("config/rule-template-test1.yml", defaultTemplate = "Ok")
28+
val config = TemplateLoader("config/rule-template-test1.yml", defaultTemplate = "Ok")
2929
assertEquals("Ok", config.templateOf("xyz"))
3030
}
3131

3232
@Test fun template5() {
3333
val expected = """
34-
|<if(variables)>
35-
|<variables:{v|<v.key> = <v.value>
36-
|}>
37-
|<endif>
38-
|<if(expr)>
39-
|こうだから、
40-
|<expr:{e|<e>
41-
|}>
42-
|<endif>
4334
|答えは、
4435
|<value>
4536
|
4637
""".trimMargin("|")
47-
val config = TemplateConfig()
48-
assertEquals(expected, config.templateOf("default"))
38+
val config = TemplateLoader()
39+
assertEquals(expected, config.templateOf("rules/length/mileToKilometer.txt"))
4940
}
5041

5142
}

src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/arithmetic/ArithmeticTest.kt renamed to src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/rules/arithmetic/ArithmeticTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package xyz.javecs.tools.text2expr.test.kotlin
1+
package xyz.javecs.tools.text2expr.test.kotlin.rules.arithmetic
22

33
import org.junit.Test
44
import xyz.javecs.tools.text2expr.Text2Expr

src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/unit/LengthTest.kt renamed to src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/rules/length/LengthTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package xyz.javecs.tools.text2expr.test.kotlin.unit
1+
package xyz.javecs.tools.text2expr.test.kotlin.rules.length
22

33
import org.junit.Test
44
import xyz.javecs.tools.text2expr.Text2Expr

src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/speed/SpeedTest.kt renamed to src/test/kotlin/xyz/javecs/tools/text2expr/test/kotlin/rules/speed/SpeedTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package xyz.javecs.tools.text2expr.test.kotlin.unit
1+
package xyz.javecs.tools.text2expr.test.kotlin.rules.speed
22

33
import org.junit.Test
44
import xyz.javecs.tools.text2expr.Text2Expr
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package xyz.javecs.tools.text2expr.test.kotlin.templates
2+
3+
import org.junit.Test
4+
import xyz.javecs.tools.text2expr.Text2Expr
5+
import kotlin.test.assertEquals
6+
7+
class SimpleExprTest {
8+
@Test fun simpleExpr1() {
9+
val expected = """
10+
|答えは、
11+
|151.27796
12+
|
13+
""".trimMargin("|")
14+
val text2Expr = Text2Expr()
15+
assertEquals(expected, text2Expr.eval("94マイルは何キロメートルですか?", rendered = true))
16+
}
17+
18+
@Test fun simpleExpr2() {
19+
val expected = """
20+
|151.27796
21+
""".trimMargin("|")
22+
val text2Expr = Text2Expr()
23+
assertEquals(expected, text2Expr.eval("94マイルは何キロメートルですか?", rendered = false))
24+
}
25+
}

0 commit comments

Comments
 (0)