我试图了解如何为专有语言构建 AST。我需要构建一个 AST,以便我可以输入我的规则和指南来检查源代码中可能存在的错误。
如何构建 AST?有没有任何书籍、文章可以帮助我入门。龙的编译器书有帮助吗?
请注意,我没有 CS 背景。
Thanks
这是一个相当大的问题。我确实感受到你的痛苦,因为我也是从非计算机背景背景解决这个问题的。这让我更加欣赏CS了。
您在研究中可能会经常看到的一件事是扩展巴科斯-诺尔范式 (EBNF)。它基本上是描述您的语言的一种方式。为您的语言创建 EBNF 将帮助您了解计算机解析它需要做什么,这会有所帮助。
回到手头的问题:您可能会使用词法分析器/解析器来构建树。
用于执行此操作的传统工具是 lex 和 yacc,或者它们更现代的近亲 flex 和 bison。
一种较新的方法是Antlr http://www.antlr.org/。强烈推荐它,但超出了我的理解范围。
我发现的第三种方法是 Python 的 pyparsing 库。由于我对 Python 的熟悉以及它描述你需要它解析的内容的可读方式,我最终选择了它。
有有很多例子 http://pyparsing.wikispaces.com/Examples可用于 pyparsing,这很有帮助。我发现构建我的解析器最有帮助的是简单计算器 http://pyparsing.wikispaces.com/file/view/SimpleCalc.py。然而,它基于相当旧的 pyparsing 版本,并且比 pyparsing 后来实现的一些强大操作所需的更复杂。简单算术 http://pyparsing.wikispaces.com/file/view/simpleArith.py是一个类似但较新的版本。
我实际上尚未使用 pyparsing 处理的一件事是正确分析语法错误。然而,它似乎为您提供了这样做所需的工具。
无论如何,这并不是您问题的完整答案,但我希望它至少能为您指出一些起点。为复杂语言构建解析器并不容易!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)