MARPA将解析任何可以用BNF编写的内容

2020-08-30 16:50:02

作者Jeffrey Kegler对MARPA的概述:MARPA是一种解析算法。它是新的,但在很大程度上是基于Jay Earley,Joop Leo,JohnAycock和R.Nigel Horspool的先前工作。Marpa旨在取代并远远超越递归下降和Yacc解析器家族。它在线性时间内解析:o递归下降解析的所有语法类。O yacc家族解析的语法类。O事实上,所有明确的语法,只要它们没有未标记的中间递归。O由上述任何一种文法的有限集合联合而成的歧义文法,Marpa是强大的。MARPA将解析任何可以用BNF编写的内容。这包括左、右和中间递归的任何混合。与递归下降不同,您不必编写解析器-MARPA从BNF生成解析器。与PEG或yacc不同,解析器生成不受限制且灵活。MARPA将任何可以写为BNF的语法转换为解析器,该解析器可以识别该BNF描述的语言中的所有内容,并拒绝该语言之外的所有内容。不强制程序员在解析时做出任意选择。如果一个规则有多个备选方案,只要每个备选方案可能产生有效的解析,就会对每个备选方案进行评估。Marpa是灵活的。与递归下降一样,MARPA允许您停下来进行自己的自定义处理。与递归不同,MARPA向您提供了到目前为止有关解析的详细信息-哪些规则和符号已被识别,它们的位置,以及哪些规则和符号下一步将被识别。