gpt4 book ai didi

ruby - 具有否定规则的树顶无限递归

转载 作者:太空宇宙 更新时间:2023-11-03 16:32:46 26 4
gpt4 key购买 nike

我有以下树顶语法:

grammar TestGrammar

rule body
text / expression
end

rule text
not_delimiter*
end

rule expression
delimiter text delimiter
end

rule delimiter
'$'
end

rule not_delimiter
!delimiter
end

end

当我尝试解析表达式时,例如“hello world $test$”,脚本进入无限循环。
问题似乎来自 not_delimiter 规则,因为当我删除它时,表达式会被解析。

这个语法有什么问题?

提前致谢。

最佳答案

问题似乎出在您尝试匹配的地方:

rule text
not_delimiter*
end

因为 * 也不会匹配任何东西,所以你有可能匹配 [^$]*,我认为这是导致无限循环的原因。

此外,您需要在起始规则中匹配多个 bodies,否则它将返回 nil,因为您只会匹配一个 text 规则或 expression 规则,但不能同时使用。

rule bodies
body+
end

这将解析:

require 'treetop'
Treetop.load_from_string DATA.read

parser = TestGrammarParser.new

p parser.parse "hello world $test$"

__END__
grammar TestGrammar
rule bodies
body+
end
rule body
expression / text
end
rule expression
delimiter text delimiter
end
rule text
not_delimiter+
end
rule not_delimiter
[^$]
end
rule delimiter
'$'
end
end

关于ruby - 具有否定规则的树顶无限递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12986416/

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