All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.treepat.expression.operators.TreepatFunction.kt Maven / Gradle / Ivy

Go to download

Treepat is a language to recognise patterns in trees in a similar way as regular expressions recognize patterns in strings. Treepat includes analogous operators to regex union, concatenation, and closure, which are extended to the notion of trees.

There is a newer version: 2.0.0
Show newest version
package com.github.treepat.expression.operators

fun treepatFunction(expression: VisitorFunction): VisitorFunction = { targetTreeNode ->
    var currentNode = targetTreeNode
    val answers = mutableListOf()
    while (currentNode != null) {
        val response = expression.invoke(currentNode)
        answers.add(
            VisitorFunctionResponse(
                response.responses.filter { it.matches.isNotEmpty() },
                response.hasMatch
            )
        )
        currentNode = currentNode.nextLeftmostPreorderNode()
    }
    val allHasMatches = answers.filter { it.hasMatch }.filter { it.responses.isNotEmpty() }.map { it.responses.last() }
    if (allHasMatches.isNotEmpty()) {
        VisitorFunctionResponse(allHasMatches, true)
    } else {
        VisitorFunctionResponseFactory.createResponseWithZeroMatches(targetTreeNode)
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy