From b3daf65de7c520b07a40481da179b48fc6348143 Mon Sep 17 00:00:00 2001 From: Samuel Pastva <daemontus@gmail.com> Date: Sat, 10 Oct 2015 22:17:14 +0200 Subject: [PATCH] Migrate to Kotlin M14 --- build.gradle | 17 ++++++----- src/main/kotlin/cz/muni/fi/ctl/Formulas.kt | 25 +++++++++-------- src/main/kotlin/cz/muni/fi/ctl/Parser.kt | 28 +++++++++++-------- .../kotlin/cz/muni/fi/ctl/FormulasTest.kt | 2 +- 4 files changed, 41 insertions(+), 31 deletions(-) diff --git a/build.gradle b/build.gradle index a1686fd..c93133a 100644 --- a/build.gradle +++ b/build.gradle @@ -1,6 +1,11 @@ -//include antlr plugin +apply plugin: 'java' +apply plugin: 'kotlin' +apply plugin: 'me.champeau.gradle.antlr4' + +//include antlr and kotlin plugin buildscript { - ext.kotlin_version = '0.13.1513' + ext.kotlin_version = '0.14.451' + repositories { maven { name 'JFrog OSS snapshot repo' @@ -16,11 +21,9 @@ buildscript { } } -apply plugin: 'java' -apply plugin: 'kotlin' -apply plugin: 'me.champeau.gradle.antlr4' - -version = '1.0' +group = "com.github.sybila" +archivesBaseName = "ctlParser" +version = '1.0.0' //antlr config antlr4 { diff --git a/src/main/kotlin/cz/muni/fi/ctl/Formulas.kt b/src/main/kotlin/cz/muni/fi/ctl/Formulas.kt index b4eb52a..7fdfdf8 100644 --- a/src/main/kotlin/cz/muni/fi/ctl/Formulas.kt +++ b/src/main/kotlin/cz/muni/fi/ctl/Formulas.kt @@ -5,7 +5,7 @@ public interface Formula { val operator: Op val subFormulas: List<Formula> - public fun get(i: Int): Formula = subFormulas[i] + operator public fun get(i: Int): Formula = subFormulas[i] } data class FormulaImpl ( @@ -31,17 +31,18 @@ data class FormulaImpl ( } -public open class Atom : Formula { - final override val operator = Op.ATOM - final override val subFormulas = listOf<Formula>() -} +public interface Atom : Formula //Boolean Atoms -public val True: Formula = object : Atom() { +public val True: Formula = object : Atom { + final override val operator = Op.ATOM + final override val subFormulas = listOf<Formula>() override fun toString():String = "True" } -public val False: Formula = object : Atom() { +public val False: Formula = object : Atom { + final override val operator = Op.ATOM + final override val subFormulas = listOf<Formula>() override fun toString():String = "False" } @@ -50,7 +51,9 @@ public data class FloatProposition ( val variable: String, val floatOp: FloatOp, val value: Double -) : Atom() { +) : Atom { + final override val operator = Op.ATOM + final override val subFormulas = listOf<Formula>() override fun toString(): String = "$variable $floatOp $value" } @@ -59,10 +62,10 @@ public data class DirectionProposition ( val variable: String, val direction: Direction, val facet: Facet -) : Atom() { - +) : Atom { + final override val operator = Op.ATOM + final override val subFormulas = listOf<Formula>() override fun toString(): String = "$variable:$direction$facet" - } diff --git a/src/main/kotlin/cz/muni/fi/ctl/Parser.kt b/src/main/kotlin/cz/muni/fi/ctl/Parser.kt index c5e4720..bf90c5e 100644 --- a/src/main/kotlin/cz/muni/fi/ctl/Parser.kt +++ b/src/main/kotlin/cz/muni/fi/ctl/Parser.kt @@ -118,7 +118,7 @@ data class ParserContext( } } - fun plus(ctx: ParserContext): ParserContext { + operator fun plus(ctx: ParserContext): ParserContext { return ParserContext(assignments + ctx.assignments) } @@ -141,7 +141,7 @@ class FileContext(val location: String) : CTLBaseListener() { override fun exitAssign(ctx: CTLParser.AssignContext) { assignments.add(Assignment( ctx.VAR_NAME().text!!, - formulas[ctx.formula()]!!, + formulas[ctx.formula()], location+":"+ctx.start.line )) } @@ -173,41 +173,44 @@ class FileContext(val location: String) : CTLBaseListener() { } override fun exitParenthesis(ctx: CTLParser.ParenthesisContext) { - formulas[ctx] = formulas[ctx.formula()]!! + formulas[ctx] = formulas[ctx.formula()] } override fun exitUnary(ctx: CTLParser.UnaryContext) { - formulas[ctx] = FormulaImpl(ctx.unaryOp().toOperator(), formulas[ctx.formula()]!!) + formulas[ctx] = FormulaImpl(ctx.unaryOp().toOperator(), formulas[ctx.formula()]) } override fun exitOr(ctx: CTLParser.OrContext) { - formulas[ctx] = formulas[ctx.formula(0)]!! or formulas[ctx.formula(1)]!! + formulas[ctx] = formulas[ctx.formula(0)] or formulas[ctx.formula(1)] } override fun exitAnd(ctx: CTLParser.AndContext) { - formulas[ctx] = formulas[ctx.formula(0)]!! and formulas[ctx.formula(1)]!! + formulas[ctx] = formulas[ctx.formula(0)] and formulas[ctx.formula(1)] } override fun exitImplies(ctx: CTLParser.ImpliesContext) { - formulas[ctx] = formulas[ctx.formula(0)]!! implies formulas[ctx.formula(1)]!! + formulas[ctx] = formulas[ctx.formula(0)] implies formulas[ctx.formula(1)] } override fun exitEqual(ctx: CTLParser.EqualContext) { - formulas[ctx] = formulas[ctx.formula(0)]!! equal formulas[ctx.formula(1)]!! + formulas[ctx] = formulas[ctx.formula(0)] equal formulas[ctx.formula(1)] } override fun exitEU(ctx: CTLParser.EUContext) { - formulas[ctx] = formulas[ctx.formula(0)]!! EU formulas[ctx.formula(1)]!! + formulas[ctx] = formulas[ctx.formula(0)] EU formulas[ctx.formula(1)] } override fun exitAU(ctx: CTLParser.AUContext) { - formulas[ctx] = formulas[ctx.formula(0)]!! AU formulas[ctx.formula(1)]!! + formulas[ctx] = formulas[ctx.formula(0)] AU formulas[ctx.formula(1)] } } data class Assignment(val name: String, val formula: Formula, val location: String) -data class Reference(val name: String) : Atom() +data class Reference(val name: String) : Atom { + final override val operator = Op.ATOM + final override val subFormulas = listOf<Formula>() +} //convenience methods @@ -230,4 +233,5 @@ fun CTLParser.FloatOpContext.toOperator(): FloatOp = when { else -> FloatOp.EQ } -fun <T> ParseTreeProperty<T>.set(k: ParseTree, v: T) = this.put(k, v) +operator fun <T> ParseTreeProperty<T>.set(k: ParseTree, v: T) = this.put(k, v) +operator fun <T> ParseTreeProperty<T>.get(k: ParseTree): T = this.get(k) diff --git a/src/test/kotlin/cz/muni/fi/ctl/FormulasTest.kt b/src/test/kotlin/cz/muni/fi/ctl/FormulasTest.kt index a1ea973..ae661f8 100644 --- a/src/test/kotlin/cz/muni/fi/ctl/FormulasTest.kt +++ b/src/test/kotlin/cz/muni/fi/ctl/FormulasTest.kt @@ -79,7 +79,7 @@ class Misc { @Test fun tooManyFormulas() { assertFailsWith(IllegalArgumentException::class) { - FormulaImpl(Op.ALL_UNTIL, True, False, Atom()) + FormulaImpl(Op.ALL_UNTIL, True, False, Reference("nothing")) } }