首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Grammar.parse似乎永远循环并且使用100%的CPU。

Grammar.parse似乎永远循环并且使用100%的CPU。
EN

Stack Overflow用户
提问于 2018-04-12 15:44:27
回答 1查看 171关注 0票数 6

https://irclog.perlgeek.de/perl6/2018-04-12#i_16038822转发

我正在玩语法,并试图解析一个ini风格的文件,但不知怎么的,Grammar.parse似乎永远循环,使用100%的CPU。有什么好主意吗?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-12 15:59:21

Token TOP在子正则表达式上有*量化符,可以解析空字符串(因为<comment>和包含<section>的组都有自己的*量化符)。

如果内部子正则表达式与空字符串匹配,则可以在不推进游标的情况下进行无限多次。目前,Perl 6没有针对此类错误的保护。

在我看来,你可以简化你的代码

代码语言:javascript
复制
token TOP {
  <comment>*
  [
    <section>
    [ <line> | <comment> ]*
  ]*
}

(不需要[...]*的外部组,因为最后一个<comment>也与节之前的注释匹配。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49800790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档