将 %% 替换为 <!-- --> 时永远解析循环
Parse looping forever when replacing %% by <!-- -->
我要变身
test: "bla bla %bla bla% bla bla bla bla %bla% bla"
进入
test: "bla bla <!--bla bla--> bla bla bla bla <!--bla--> bla"
我认为这很容易,因为它是
的细微变化
但是我的代码永远循环,尽管我有 "to end" 规则:
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
我不会使用 to
(或 thru
),它们在我看来有点危险。我会使用类似的东西:
toggle: false
parse test [
some [
change #"%" (either toggle: not toggle ["<!--"]["-->"])
| skip
]
]
此外,您可以删除 toggle
,如果您想要:
parse test [
some [
change #"%" (first reverse ["-->" "<!--"])
| skip
]
]
问题出在您试图用空字符串交换“%”。 "%" 留在那里并且总是被击中。您的规则适用于这些修改
rules: [
any [
to "%" mark: (
toggle: negate toggle
either toggle = 1 [
change/part mark {<!--} 1
][
change/part mark {-->} 1
]
)
]
to end
]
不使用parse
,虽然没有任何优势,只是另一种方式:
until [none? attempt [insert remove find test "%" first reverse ["-->" "<!--"]]]
我要变身
test: "bla bla %bla bla% bla bla bla bla %bla% bla"
进入
test: "bla bla <!--bla bla--> bla bla bla bla <!--bla--> bla"
我认为这很容易,因为它是
但是我的代码永远循环,尽管我有 "to end" 规则:
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
我不会使用 to
(或 thru
),它们在我看来有点危险。我会使用类似的东西:
toggle: false
parse test [
some [
change #"%" (either toggle: not toggle ["<!--"]["-->"])
| skip
]
]
此外,您可以删除 toggle
,如果您想要:
parse test [
some [
change #"%" (first reverse ["-->" "<!--"])
| skip
]
]
问题出在您试图用空字符串交换“%”。 "%" 留在那里并且总是被击中。您的规则适用于这些修改
rules: [
any [
to "%" mark: (
toggle: negate toggle
either toggle = 1 [
change/part mark {<!--} 1
][
change/part mark {-->} 1
]
)
]
to end
]
不使用parse
,虽然没有任何优势,只是另一种方式:
until [none? attempt [insert remove find test "%" first reverse ["-->" "<!--"]]]