我一直想知道为什么似乎没有任何解析器,比如说,BNF http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form,其行为类似于各种库中的正则表达式。
当然,还有类似的事情ANTLR http://www.antlr.org/, Yacc http://en.wikipedia.org/wiki/Yacc和许多其他人生成代码反过来,它可以解析CFG http://en.wikipedia.org/wiki/Context-free_grammar,但似乎没有一个库可以在没有中间步骤的情况下做到这一点。
我有兴趣写一个Packrat 解析器 http://en.wikipedia.org/wiki/Packrat_parser#Implementing_parsers_from_parsing_expression_grammars,启动所有与正则表达式相关的嵌套括号怪癖(并且,也许更重要的是,为了它的运动),但不知何故,我有这种感觉,我只是走进了另一个停滞的问题 - 就像沼泽类一样。
这些解析器是否存在技术/理论限制,或者我只是错过了一些东西?
我认为这更多是一种文化问题。上下文无关语法的使用主要限于编译器,编译器通常具有与每个产生规则相关联的代码。在某些语言中,输出代码比模拟回调更容易。在其他情况下,您将看到解析器库:例如 Haskell 中的解析器组合器。另一方面,正则表达式在 grep 等工具中得到广泛使用,每次用户给出新的正则表达式时都运行 C 编译器很不方便。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)