> [\-6ren">
gpt4 book ai didi

parsing - Rascal:解析具有多个 "_"s 的字符串

转载 作者:行者123 更新时间:2023-12-03 08:10:20 25 4
gpt4 key购买 nike

我尝试解析包含多个“_”的字符串,但出现 CallFailed 异常。

我试图创建一个尽可能小的问题语法示例。

layout Layout = WhitespaceAndComment* !>> [\ \t\n\r#];
lexical WhitespaceAndComment = [\ \t\n\r] | @category="Comment" "#" ![\n]* $;

syntax SourceList = sourceList: "$"? "{"? Id sourceFile "}"?;
lexical Id = ([a-zA-Z/.\-][a-zA-Z0-9_/.]* !>> [a-zA-Z0-9_/.]) \ Reserved;
keyword Reserved =
"$" | "{" | "}" ;

我无法解析这个小例子。
rascal>try { parse(#SourceList, "test"); } catch CallFailed(m, e): println("<m> : <e>");
|prompt:///|(25,9,<1,25>,<1,34>) : [type(sort("SourceList"),(sort("SourceList"):choice(sort("SourceList"),{prod(label("sourceList",sort("SourceList")),[opt(lit("$")),layouts("$default$"),opt(lit("{")),layouts("$default$"),label("sourceFile",lex("Id")),layouts("$default$"),opt(lit("}"))],{})}),layouts("$default$"):choice(layouts("$default$"),{prod(layouts("$default$"),[],{})}),empty():choice(empty(),{prod(empty(),[],{})}),lex("Id"):choice(lex("Id"),{prod(lex("Id"),[conditional(seq([\char-class([range(45,47),range(65,90),range(97,122)]),conditional(\iter-star(\char-class([range(46,57),range(65,90),range(95,95),range(97,122)])),{\not-follow(\char-class([range(46,57),range(65,90),range(95,95),range(97,122)]))})]),{delete(keywords("Reserved"))})],{})}),keywords("Reserved"):choice(keywords("Reserved"),{prod(keywords("Reserved"),[lit("$")],{}),prod(keywords("Reserved"),[lit("}")],{}),prod(keywords("Reserved"),[lit("{")],{})}))),"${test}"]
ok

从“test”更改为“${test}”的源文件会给出完全相同的输出。

嵌入 SourceList 的完整语法有更多规则。但后来我得到以下结果。
set(${TARGET_NAME}_DEPS
GenConfiguration_OBJ_TN_Common # accept
${COMMON_BB_PCMDEPS} # reject
COMMON_BB_PCMDEPS # accept
COMMON_BB_PCM_DEPS # reject
)

我想有一个解决方案。

最小的例子有什么问题?为什么 test 或 ${test} 不被接受?

顺便说一句:我正在使用最新的不稳定。安装和尝试稳定版本有意义吗?

最佳答案

我试图重现您的问题,但它似乎在这里工作:

rascal>parse(#SourceList, "test")
SourceList: (SourceList) `test`

不稳定版本目前很好。事实上,现在是发布稳定版本的时候了。所以现在你最好使用不稳定的版本。
CallFailed异常令人困惑。这意味着调用了一个无法匹配或找不到的函数。所以也许 parse不导入 ParseTree 不在范围内, 或者你有一个不同的函数叫做 parse没有 type[Tree]str作为范围内的预期参数。只要导入 ParseTree 模块,就会调用 parse应该没事。

如果您取得了进展,请告诉我。也许重新启动 Eclipse 也可能会清除一些问题。

关于parsing - Rascal:解析具有多个 "_"s 的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56578332/

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