我最近对制作计算机语言很感兴趣。 BNF& yacc让我发疯。然后我看到PEG,我被它的优雅所吸引。我想了解更多。详情是:
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
self.table.touchesBegan(touches, withEvent: event)
}
非常感谢.◉-◉
答案 0 :(得分:1)
这个问题太宽泛了,无法在此框中提出完整的答案,但您可能想从这里开始:
“解析表达式语法”是指定语言的无上下文语法的替代方法。
从根本上说,PEG语法是一种解析语言的程序......这使程序员更容易理解,而无上下文语法是生成语言所有文本的模式。从无上下文语法到解析器的翻译是不完善和难以理解的,这使得初学者难以在实践中使用CFG。
解析PEG语法有许多不同的算法,但它们都等同于简单的算法:首先尝试第一种选择,如果不起作用则尝试下一种。
这看起来容易多了,对吧?它主要是,但是初学者仍然有很多空间遇到PEG解析器的困难。不同之处在于它们如何处理歧义。
当您使用基于CFG的解析器生成器,并且您的语法不明确时,您会收到一堆难以理解和修复的错误和警告。
当你使用含糊不清的PEG语法时,一切看起来都很好,但是如果你真的不明白你的语法含糊不清,为什么会这样,你会得到与你期望的结果不同的解析结果。