Grammar.parse似乎永远循环并使用100%的CPU
发布时间:2020-12-15 21:43:26 所属栏目:大数据 来源:网络整理
导读:转自 the #perl6 IRC channel,by jkramer,with permission 我正在玩语法并试图解析一个ini风格的文件,但不知何故,Grammar.parse似乎永远循环并使用100%的CPU.任何想法在这里有什么问题? grammar Format { token TOP { [ comment* [ section [ line | comme
|
转自
the #perl6 IRC channel,by jkramer,with permission
我正在玩语法并试图解析一个ini风格的文件,但不知何故,Grammar.parse似乎永远循环并使用100%的CPU.任何想法在这里有什么问题? grammar Format {
token TOP {
[
<comment>*
[
<section>
[ <line> | <comment> ]*
]*
]*
}
rule section {
'[' <identifier> <subsection>? ']'
}
rule subsection {
'"' <identifier> '"'
}
rule identifier {
<[A..Za..z]> <[A..Za..z0..9_-]>+
}
rule comment {
<[";]> .*? $$
}
rule line {
<key> '=' <value>
}
rule key {
<identifier>
}
rule value {
.*? $$
}
}
Format.parse('lol.conf'.IO.slurp)
解决方法
Token TOP在subregex上具有可以解析空字符串的*量词(因为< comment>和包含< section>的组都有自己的*量词).
如果内部子规则匹配空字符串,它可以无限次地执行,而不会使光标前进.目前,Perl 6没有针对此类错误的保护. 在我看来,你可以简化你的代码 token TOP {
<comment>*
[
<section>
[ <line> | <comment> ]*
]*
}
(不需要[…] *的外部组,因为最后的< comment>也匹配部分之前的注释. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
