ruby - treetop 上最简单的规则不起作用

标签 ruby treetop peg

我有一个只有两条规则的树顶语法:

grammar RCFAE
    rule num
        [0-9]+ <Num>
    end

    rule identifier
        [a-zA-Z] [a-zA-Z]* <ID>
    end
end

我正在尝试解析简单的字符串(“A”和“5”)。如果我把那个规则放在第一位,“5”被识别为 Num,如果我把那个规则放在第二位,则返回 nil。类似地,如果我将该规则放在第一位,“A”将被识别为 ID,如果我将该规则放在第二位,则返回 nil。我无法理解这两条规则如何以任何方式重叠。这让我发疯!

关于树顶或正则表达式,有什么我遗漏或不理解的地方吗?预先感谢您的帮助。

最佳答案

Treetop 期望第一个规则是“主要规则”。它不会尝试应用您定义的所有规则,直到一个匹配 - 它只应用主要规则,如果不匹配,它就会失败。

要执行您想要的操作,您需要添加一个主要规则,它可能是一个数字或一个标识符,如下所示:

grammar RCFAE
    rule expression
        num / identifier
    end

    rule num
        [0-9]+ <Num>
    end

    rule identifier
        [a-zA-Z] [a-zA-Z]* <ID>
    end
end

关于ruby - treetop 上最简单的规则不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8205785/

相关文章:

ruby-on-rails - Ruby 1.9 Base64 编码写入文件错误

ruby-on-rails - Heroku 删除生产中的帖子时出错 : Rails

parsing - 用于 Python 样式缩进的 PEG

ruby - 树顶基本解析和正则表达式使用

error-handling - 为什么解析器组合器在发生故障的情况下不回退?

ruby - XPath 选择 OOXML 中两个文本标记之间的所有节点?

ruby-on-rails - 在 Rails 中使用 RSpec 测试 Auth0 登录

ruby - Treetop 语法中的匹配标签对

javascript - PEG.js 匹配数组中的单词

python - 使用琶音处理空格或逗号分隔的标记列表