【问题标题】:Ruby Treetop how to include everything that does not match the grammarRuby Treetop 如何包含与语法不匹配的所有内容
【发布时间】:2019-01-08 00:12:04
【问题描述】:

我想创建一个树顶语法。我已经创建了规则来匹配文件中我感兴趣的部分。

grammar Sexp

  rule bodies
    body+
  end

  rule body
    commentPortString (ifdef_blocks / interface)+ (!newLine)
  end
...
end

如何在文件上运行此程序以提取 bodies 并忽略我不关心的其他部分,还是我最终还需要为这些部分编写规则?

提前致谢

【问题讨论】:

    标签: ruby parsing treetop


    【解决方案1】:

    重复匹配不属于规则!body 的任何字符. 是PEG 语法中的一个常见习惯用法。像这样的:

    rule bodies
      ((!body .)* body)+ (!body .)*
    end
    

    【讨论】:

    • 感谢作品。但它会显着降低解析器的速度。
    • 改用((!commentPortString .)* body)+ (!commentPortString .)* 或不匹配commentPortString 内的空格可能有助于提高性能(我的意思是把它移到规则之外)。只是一些想法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2019-01-17
    • 1970-01-01
    • 2021-07-09
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多