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>也匹配部分之前的注释. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |