Skip to content

Commit

Permalink
Migrate to Kotlin M14
Browse files Browse the repository at this point in the history
  • Loading branch information
daemontus committed Oct 10, 2015
1 parent a413129 commit b3daf65
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 31 deletions.
17 changes: 10 additions & 7 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -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 {
Expand Down
25 changes: 14 additions & 11 deletions src/main/kotlin/cz/muni/fi/ctl/Formulas.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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 (
Expand All @@ -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"
}

Expand All @@ -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"
}

Expand All @@ -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"

}


Expand Down
28 changes: 16 additions & 12 deletions src/main/kotlin/cz/muni/fi/ctl/Parser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ data class ParserContext(
}
}

fun plus(ctx: ParserContext): ParserContext {
operator fun plus(ctx: ParserContext): ParserContext {
return ParserContext(assignments + ctx.assignments)
}

Expand All @@ -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
))
}
Expand Down Expand Up @@ -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

Expand All @@ -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)
2 changes: 1 addition & 1 deletion src/test/kotlin/cz/muni/fi/ctl/FormulasTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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"))
}
}

Expand Down

0 comments on commit b3daf65

Please sign in to comment.