首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rebol解析问题

rebol解析问题
EN

Stack Overflow用户
提问于 2010-08-13 15:54:52
回答 3查看 244关注 0票数 3

简单的解析示例:

代码语言:javascript
复制
ab: charset "ab"
parse "aaa" [some ab]  
; == true

如果我想要一条线(定义ab就位),我该怎么做?

代码语言:javascript
复制
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:

代码语言:javascript
复制
parse "aaa" [some (charset "ab")]
; == false
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-13 20:23:52

你在找“写作”

代码语言:javascript
复制
>> parse "aaa" compose [ some (charset [#"a" #"b"] ) ]
== true
票数 2
EN

Stack Overflow用户

发布于 2010-08-13 22:49:10

在分析方言中,括号计算表达式。然而,评估的结果并没有成为解析规则的一部分。这是设计出来的,所以你可以按照这种风格工作:

代码语言:javascript
复制
>> count: 0
== 0

>> parse "aab" [while ["a" (print "Match a" ++ count)] "b"]
Match a
Match a
== true

>> count
== 2

让评估成为解析规则的一部分是一个不同的用例。有些实例(如您的实例)适合组合,因为它们只计算一次表达式。但我的比赛计数表达可能会出错:

代码语言:javascript
复制
>> count: 0
== 0

>> rule: compose/deep [while ["a" (print "Match a" ++ count)] "b"]
Match a
== [while ["a" 0] "b"]

>> count
== 1

>> parse "aab" rule
== false

AFAIK,Rebol 2没有在解析过程中运行"DO“表达式的一般方法,并且将表达式有效地合并到规则中。因此,您必须使用括号大小的代码来获取和设置单词,然后在规则中使用这些单词。

据推测,Rebol 3添加了一个版本的,但我找不到在当前alpha版本中工作的任何示例。正如在wiki上所描述的,我希望返回true并捕获结果"abc":

代码语言:javascript
复制
>> result: none
== none

>> parse "abc" [copy result thru do [reverse "cba"]]
== false

>> result
== none

(它也不适用于简单的例子。但我曾经尝试过,因为有句话"A DO语句可以用作规则参数来复制、设置或返回操作,它没有说不能在其他地方使用,但也没有说它可以在其他地方使用.“

票数 2
EN

Stack Overflow用户

发布于 2019-09-02 13:00:01

你真正看到的可能是

代码语言:javascript
复制
>> parse "aaa" [(ab: charset "ab")  some ab]
== true

在解析表达式中开始定义一个单词,然后使用该单词作为规则的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3478589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档