gpt4 book ai didi

smalltalk - PetitParser:如何匹配 token 集

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

在 PetitParser2 中,如何匹配一组封闭的标记,例如月份名称?例如。 (伪代码)[:单词 | MonthNames anySatisfy: [ :mn | mn beginsWith: word ] ] 作为解析器。

PPPredicateSequenceParser 似乎有可能,但似乎您必须提前知道字符串大小。我想我可以做类似的事情:

| monthRules |
monthRules := Array streamContents: [ :unamused: |
MonthNames collect: [ :e |
s nextPut: e asString asPParser.
s nextPut: (e first: 3) asPParser ] ].
^ PP2ChoiceNode withAll: monthRules

但我想知道是否有内置/直接的东西

最佳答案

其他更笨拙且效率更低的选择是使用自定义 block :

[ :context | 
| position names |
names := #('January' 'February' 'March' 'April').
position := context position.
names do: [ :name |
(context next: name size) = name ifTrue: [
^ name
] ifFalse: [
context position: position
]
].
^ PP2Failure new
] asPParser parse: 'April'

不过我不推荐这样做,因为 PP2 对 block 一无所知,也无法应用任何优化。

关于smalltalk - PetitParser:如何匹配 token 集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59036943/

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