gpt4 book ai didi

java - 如何在不使用 . Between() 的情况下从 jparsec 返回列表

转载 作者:行者123 更新时间:2023-12-01 11:16:00 25 4
gpt4 key购买 nike

我正在使用 JParsec 库开发一个简单的解析器,并希望解析以下内容:

some, list, of, things

使用 parser.sepBy(Scanners.isChar(',') 可以轻松完成此操作但无法解析更大的文档,除非我将其包装在 between 中.

最终我想解析一些内容:

implements some.java.Interface, some.other.Interface {
...
}

但是,我找不到一个神奇的组合来表示“sepBy X 直到(但不消耗 Y)”甚至“sepBy X 直到失败”。

我在这里错过了一些简单的东西吗?

最佳答案

示例目录中有一个或多或少完整的 Java 解析器,它实现了此类内容。诀窍是将您的解析器包含在序列内的事物列表中,或者将 next() 与另一个解析器结合起来用于花括号之间的主体,假设花括号不能出现在列表的元素中。

这是来自 org.codehaus.jparsec.examples.java.parser.DeclarationParserclassDef 方法:

 static Parser<Declaration> classDef(Parser<Modifier> mod, Parser<Member> member) {
return curry(ClassDef.class).sequence(
mod.many(), term("class"), Terminals.Identifier.PARSER, TYPE_PARAMETERS.optional(),
term("extends").next(ELEMENT_TYPE_LITERAL).optional(),
term("implements").next(ELEMENT_TYPE_LITERAL.sepBy1(term(","))).optional(),
body(member));
}

您感兴趣的部分是 term("implements").next(ELEMENT_TYPE_LITERAL.sepBy1(term(","))).optional()。请注意,此片段是解析器序列的可选部分,其返回的元素用于创建ClassDef AST对象。

关于java - 如何在不使用 . Between() 的情况下从 jparsec 返回列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31818745/

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