有关PEG的一些信息需要

时间:2016-01-24 13:45:28

标签: algorithm yacc peg

我最近对制作计算机语言很感兴趣。 BNF& yacc让我发疯。然后我看到PEG,我被它的优雅所吸引。我想了解更多。详情是:

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    self.table.touchesBegan(touches, withEvent: event)
}

非常感谢.◉-◉

1 个答案:

答案 0 :(得分:1)

这个问题太宽泛了,无法在此框中提出完整的答案,但您可能想从这里开始:

http://bford.info/packrat/

“解析表达式语法”是指定语言的无上下文语法的替代方法。

从根本上说,PEG语法是一种解析语言的程序......这使程序员更容易理解,而无上下文语法是生成语言所有文本的模式。从无上下文语法到解析器的翻译是不完善和难以理解的,这使得初学者难以在实践中使用CFG。

解析PEG语法有许多不同的算法,但它们都等同于简单的算法:首先尝试第一种选择,如果不起作用则尝试下一种。

这看起来容易多了,对吧?它主要是,但是初学者仍然有很多空间遇到PEG解析器的困难。不同之处在于它们如何处理歧义。

当您使用基于CFG的解析器生成器,并且您的语法不明确时,您会收到一堆难以理解和修复的错误和警告。

当你使用含糊不清的PEG语法时,一切看起来都很好,但是如果你真的不明白你的语法含糊不清,为什么会这样,你会得到与你期望的结果不同的解析结果。