gpt4 book ai didi

pharo - PetitParser 不是分布式的?

转载 作者:行者123 更新时间:2023-12-04 05:05:43 25 4
gpt4 key购买 nike

PetitParser 中的规则是分布式的吗?

有以下规则:

integerLiteral --> hexIntegerLiteral / octalIntegerLiteral / decimalIntegerLiteral
hexIntegerLiteral --> hexNumeral , (integerTypeSuffix optional)
octalIntegerLiteral --> octalNumeral , (integerTypeSuffix optional)
decimalIntegerLiteral --> decimalNumeral , (integerTypeSuffix optional)

如果我将它们更改为:
integerLiteral --> (hexIntegerLiteral / octalIntegerLiteral / decimalIntegerLiteral) , (integerTypeSuffix optional)
hexIntegerLiteral --> hexNumeral
octalIntegerLiteral --> octalNumeral
decimalIntegerLiteral --> decimalNumeral

然后 0777L不再解析。它应该匹配 octalNumeral , (integerTypeSuffix optional)或在新版本 octalIntegerLiteral , (integerTypeSuffix optional)但这并没有发生。

最佳答案

是的,PetitParser 中的有序选择是分布式的。在您的示例中,缺少一些上下文,所以我不知道为什么它对您不起作用。

PetitParser 优化器会自动执行您建议的更改。重写规则(以稍微更一般的形式)定义为:

PPOptimizer>>#postfixChoice
<optimize>

| before prefix body1 body2 postfix after |
before := PPListPattern any.
prefix := PPPattern any.
body1 := PPListPattern any.
body2 := PPListPattern any.
postfix := PPPattern any.
after := PPListPattern any.
rewriter
replace: before / (prefix , body1) / (prefix , body2) / after
with: before / (prefix , (body1 / body2)) / after.
rewriter
replace: before / (body1 , postfix) / (body2 , postfix) / after
with: before / ((body1 / body2) , postfix) / after

关于pharo - PetitParser 不是分布式的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15526239/

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