当前位置:  开发笔记 > 编程语言 > 正文

编写编程语言解析器的最佳实践

如何解决《编写编程语言解析器的最佳实践》经验,为你挑选了5个好方法。

在编写解析器时是否应该遵循最佳实践?



1> mike g..:

收到的智慧是使用解析器生成器+语法,这似乎是一个很好的建议,因为您使用的是一个严格的工具,并且可能会减少工作中的错误和潜在的错误.

要使用解析器生成器,语法必须是无上下文的.如果您正在设计要解析的语言,那么您可以控制它.如果您不确定,那么如果您开始语法路线,可能会花费很多精力.即使它在实践中没有上下文,除非语法是巨大的,否则手动编写递归的正确解析器可能更简单.

无上下文不仅可以使解析器生成器成为可能,而且还使手动编码解析器更加简单.你最终得到的是每个短语一个(或两个)函数.如果你干净地组织和命名代码并不是比语法更难看(如果你的IDE可以向你展示调用hierachies,那么你几乎可以看到语法是什么).

优点:-

更简单的构建

更好的性能

更好地控制输出

可以应对小的偏差,例如使用不是100%无上下文的语法

我并不是说语法总是不合适,但通常效益很小,而且往往不会受到成本和风险的影响.

(我认为对他们的论点似是有吸引力的,并且他们普遍存在偏见,因为它是一种表明一个人更懂计算机科学知识的方式.)



2> Anonymous..:

几条建议:

了解你的语法 - 以合适的形式写下来

选择合适的工具.使用Spirit2x在C++中执行此操作,或选择antlr,yacc等适合您的外部解析器工具

你需要一个解析器吗?也许regexp就足够了?或者也许破解perl脚本来做这个伎俩?编写复杂的解析器需要时间.



3> Eclipse..:

不要过度使用正则表达式 - 虽然它们有它们的位置,但它们根本没有能力处理任何类型的真正解析.你可以推动他们,但你最终会撞到一堵墙或最终导致无法维护的混乱.你最好找一个可以处理更大语言集的解析器生成器.如果你真的不想进入工具,你可以看一下递归下降解析器 - 这是一个非常简单的手工编写小解析器的模式.它们不像大解析器生成器那样灵活或功能强大,但它们的学习曲线要​​短得多.

除非你有非常严格的性能要求,试着让你的图层分开 - 词法分析器读取单个标记,解析器将它们排列到树中,然后语义分析检查所有内容并链接引用,然后是最后阶段输出任何内容正在制作中.保持逻辑的不同部分分开将使以后更容易维护.



4> Paul W Homer..:

首先阅读大部分龙书.

如果你知道如何构建它们,解析器并不复杂,但它们并不是那种如果你投入足够的时间,你最终会到达那里的东西.在现有知识库的基础上进行构建会更好.(否则期望写出并扔掉几十次).



5> Anton Gogole..:

是的.尝试生成它,而不是写.考虑使用yacc,ANTLR,Flex/Bison,Coco/R,GOLD Parser生成器等.只有当现有的解析器生成器都不符合您的需求时,才能手动编写解析器.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有