当用<! - - >替换%%时,永远解析循环

时间:2017-11-01 07:56:57

标签: parsing rebol red

我想转型

 test: "bla bla %bla bla% bla bla bla bla %bla% bla"

 test: "bla bla <!--bla bla--> bla bla bla bla <!--bla--> bla"

我认为这很容易,因为它是red parsing and replacing double % with <> doesn't work

的轻微变化

但我的代码永远循环,尽管我已经&#34;结束&#34;规则:

test: "bla bla %bla bla% bla bla bla bla %bla% bla"


toggle: -1
rules: [ 
    any [
        to "%" mark: (
            toggle: negate toggle 
            either toggle = 1 [change mark {} insert mark {<!--}][change mark {} 
            insert mark {-->}]
    ) 
    ]
    |
    to end
] 

parse test rules
test

3 个答案:

答案 0 :(得分:3)

我不会使用to(或thru),它们有点危险IMO。我会使用类似的东西:

toggle: false 
parse test [
    some [
        change #"%" (either toggle: not toggle ["<!--"]["-->"]) 
    |   skip
    ]
]

此外,如果您愿意,可以删除toggle

parse test [
    some [
        change #"%" (first reverse ["-->" "<!--"]) 
    |   skip
    ]
]

答案 1 :(得分:2)

问题来自您尝试用空字符串交换“%”。 “%”留在那里,总是受到打击。您的规则适用于这些修改

rules: [ 
    any [
        to "%" mark: (
            toggle: negate toggle 
            either toggle = 1 [
                change/part mark  {<!--} 1 
            ][
                change/part   mark {-->} 1
            ]
        ) 
    ] 
    to end
] 

答案 2 :(得分:2)

不使用parse,虽然没有优势,只是另一种方式:

until [none? attempt [insert remove find test "%" first reverse ["-->" "<!--"]]]