4

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

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。我无法理解这两个规则如何以任何方式重叠。这让我疯狂!

关于树梢或正则表达式,我有什么遗漏或不了解的吗?在此先感谢您的帮助。

4

1 回答 1

6

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

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

grammar RCFAE
    rule expression
        num / identifier
    end

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

    rule identifier
        [a-zA-Z] [a-zA-Z]* <ID>
    end
end
于 2011-11-20T23:56:59.650 回答