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)匹配,但这并没有发生。
发布于 2013-03-20 23:21:29
是的,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) / afterhttps://stackoverflow.com/questions/15526239
复制相似问题