我有一个只有两条规则的树顶语法:
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/