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

com.github.treepat.expression.operators.SiblingFunction.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 siblingFunction(
    firstSibling: VisitorFunction,
    secondSibling: VisitorFunction
): VisitorFunction = { targetTreeNode ->
    val firstAnswer = firstSibling.invoke(targetTreeNode)
    var answers = emptyList()
    if (firstAnswer.hasMatch) {
        answers = firstAnswer.responses.map {
            var nextNode = targetTreeNode
            if (it.matches.isNotEmpty()) {
                nextNode = it.lastVisitedSibling?.moveToRightSibling()
            }
            val response = secondSibling.invoke(nextNode)
            VisitorFunctionResponseFactory.createMergeResponse(it, response)
        }
    }
    VisitorFunctionResponseFactory.createResponse(answers, targetTreeNode)
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy