简单的解析示例:
ab: charset "ab"
parse "aaa" [some ab]
; == true如果我想要一条线(定义ab就位),我该怎么做?
parse "aaa" [some [charset "ab"]]
; ** Script Error: Invalid argument: ?function?
parse "aaa" [some (charset "ab")]
; (INTERPRETER HANGS UP)我使用REBOL 2.7.7.4.2
更新
在rebol 3:
parse "aaa" [some (charset "ab")]
; == false发布于 2010-08-13 20:23:52
你在找“写作”
>> parse "aaa" compose [ some (charset [#"a" #"b"] ) ]
== true发布于 2010-08-13 22:49:10
在分析方言中,括号计算表达式。然而,评估的结果并没有成为解析规则的一部分。这是设计出来的,所以你可以按照这种风格工作:
>> count: 0
== 0
>> parse "aab" [while ["a" (print "Match a" ++ count)] "b"]
Match a
Match a
== true
>> count
== 2让评估成为解析规则的一部分是一个不同的用例。有些实例(如您的实例)适合组合,因为它们只计算一次表达式。但我的比赛计数表达可能会出错:
>> count: 0
== 0
>> rule: compose/deep [while ["a" (print "Match a" ++ count)] "b"]
Match a
== [while ["a" 0] "b"]
>> count
== 1
>> parse "aab" rule
== falseAFAIK,Rebol 2没有在解析过程中运行"DO“表达式的一般方法,并且将表达式有效地合并到规则中。因此,您必须使用括号大小的代码来获取和设置单词,然后在规则中使用这些单词。
据推测,Rebol 3添加了一个版本的做,但我找不到在当前alpha版本中工作的任何示例。正如在wiki上所描述的,我希望返回true并捕获结果"abc":
>> result: none
== none
>> parse "abc" [copy result thru do [reverse "cba"]]
== false
>> result
== none(它也不适用于简单的例子。但我曾经尝试过,因为有句话"A DO语句可以用作规则参数来复制、设置或返回操作,它没有说不能在其他地方使用,但也没有说它可以在其他地方使用.“
发布于 2019-09-02 13:00:01
你真正看到的可能是
>> parse "aaa" [(ab: charset "ab") some ab]
== true在解析表达式中开始定义一个单词,然后使用该单词作为规则的一部分。
https://stackoverflow.com/questions/3478589
复制相似问题