gpt4 book ai didi

parsing - 解析器组合器 : how to terminate repetition on keyword

转载 作者:行者123 更新时间:2023-12-02 03:52:29 27 4
gpt4 key购买 nike

我正在尝试找出如何使用关键字终止单词的重复。一个例子:

class CAQueryLanguage extends JavaTokenParsers {
def expression = ("START" ~ words ~ "END") ^^ { x =>
println("expression: " + x);
x
}
def words = rep(word) ^^ { x =>
println("words: " + x)
x
}
def word = """\w+""".r
}

当我执行时

val caql = new CAQueryLanguage
caql.parseAll(caql.expression, "START one two END")

它打印 words: List(one, Two, END),表明 words 解析器已消耗了我输入中的 END 关键字,使表达式解析器无法匹配。我希望 END 不与 words 匹配,这将允许 表达式 成功解析。

最佳答案

这是您要找的吗?

import scala.util.parsing.combinator.syntactical._

object CAQuery extends StandardTokenParsers {
lexical.reserved += ("START", "END")
lexical.delimiters += (" ")

def query:Parser[Any]= "START" ~> rep1(ident) <~ "END"

def parse(s:String) = {
val tokens = new lexical.Scanner(s)
phrase(query)(tokens)
}
}

println(CAQuery.parse("""START a END""")) //List(a)
println(CAQuery.parse("""START a b c END""")) //List(a, b, c)

如果您想了解更多详情,可以查看this blog post

关于parsing - 解析器组合器 : how to terminate repetition on keyword,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1528333/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com